您的位置首页  散文评论

毫秒和秒的换算(毫秒和秒的换算java)满满干货

计算耗时的方法常见的计算一段代码的耗时情况都是计算开始时间点的时间戳,然后在结束的时候用当前时间戳减去之前记录好的,例如:java复制代码Lon

毫秒和秒的换算(毫秒和秒的换算java)满满干货

 

计算耗时的方法常见的计算一段代码的耗时情况都是计算开始时间点的时间戳,然后在结束的时候用当前时间戳减去之前记录好的,例如:java复制代码Long starTime = System.currentTimeMillis();

// ....Long runTime = System.currentTimeMillis() - starTime; 但如果我说这个方式其实是错的,不准确的,是不是有点颠覆你的认知。

先把结论放这里:System.currentTimeMillis用的是墙上时钟,墙上时钟在计算时间间隔有可能会有误差,计算时间间隔应该用单调时钟System.nanoTime短时间方法内测一下倒是也没关系,如果是长作业任务测量执行时间,最好还是用单调时钟。

依赖时钟的方式首先将一下日常开发中,我们 应用程序会以各种方式依赖时钟,大致类别有:时间间隔和时间点时间间隔某个请求是否超时某项服务99%的响应时间是多少QPS、TPS时间点文章定时发送、定时推送消息缓存条目何时过期

时钟种类单调时钟 墙上时钟(钟表时间)墙上时钟根据某个日历(参照时间)返回当前的日期与时间Java中的System.currenTimeMillis就是典型的墙上时钟他会返回自1970年1月1日以来的秒数和毫秒数(。

不含闰秒)时钟回拨:如果本地时钟远远快于NTP服务器,强制重制后会跳回到先前的某个时间点这种跳跃是忽略闰秒的所以墙上时钟不适合用来测量时间间隔闰秒:由于地球的不均匀自转和长期变慢性会使世界时和原子时之间相差正负0.9秒。

但出现这种情况时,就要把世界时往前或者往后拨动1秒就有可能会出现那一分钟少了一秒或者多了一秒:9:46:59秒9:46:60秒单调时钟单调时钟更适合测量时间段(时间间隔),例如超时或者服务的响应时间Java中的

System.nanoTime返回的就是单调时钟单调时钟,意味着他永远都是向前,不会出现墙上时钟回拨的现象在开发中,我们肯定会写过在某个动作开始前用System.currenTimeMillis获取时间戳,然后在结束的时间再获取一次,然后两者相见。

但其实这种最好是用单调时间来做,因为墙上时钟会有时钟回拨的问题,不适测量时间点单调时钟参考的可能是电脑启动以后经历的纳秒数或者是其他因此比较不同节点上的单调时钟差值毫无意义时钟摆动:如果本地的单调时钟快于或慢于NTP,NTP会控制本地石英的振动频率(也叫。

摆动)总结时钟分为墙上时钟和单调时钟墙上时钟:Sytem.currenTimeMillis,单调时钟:System.nanoTime墙上时钟出现时钟时钟回拨时会忽略闰秒,所以不适合用于测量时间间隔下一篇讲讲分布式系统中的2个

最不可靠的组件,不可靠时钟,图灵机得主Lamport老爷子有一篇关于时钟的的论文 《Time, Clocks, and the Ordering of Events in a Distributed System》

,这篇论文也是在分布式领域被引用最多的。作者:Ashleejy链接:https://juejin.cn/post/7240374267697791034

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186