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

posted @ 2022-04-14 14:31  迷走神经  阅读(968)  评论(0编辑  收藏  举报