System.nanoTime()与System.currentTimeMillis()的区别


System.nanoTime()的初始值是在本JVM实例启动时"随机"选择的一个数字,随着JVM的运行而递增(常用来计算实时时间差),System.currentTimeMillis表示系统时间,这就导致了的它们的几个差别:

  1. System.currentTimeMillis()表示系统时间(即UTC). System.nanoTime()无法表示当前时间,本质上它是一个随机数字.
  2. 在同一机器上的不同JVM上,System.currentTimeMillis是相同的,System.nanoTime()是不同的.
  3. System.currentTimeMillis()系统时间敏感,System.nanoTime()系统时间不敏感.比如我们将系统时间往前调一秒,System.currentTimeMillis()相比修改前会减少1000.而System.nanoTime()不会变化.

基于System.nanoTime()系统时间不敏感的特性,它被广泛应用在需要相对时间的场景中,如ScheduledThreadPoolExecutor,在0点0分添加一个1小时后执行的任务,那么只有在系统运行1小时后,它才会被触发,在此期间无论如何修改系统时间都不会影响.



转载:https://www.jianshu.com/p/4fc9c3238164


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM