gpt4 book ai didi

java - Thread.sleep() 是否使用与 System.nanoTime() 相同的时钟

转载 作者:行者123 更新时间:2023-11-29 05:17:21 26 4
gpt4 key购买 nike

这个问题是关于进行某种等待的库函数之间的关系,例如Thread.sleep(long)Object.wait(long)BlockingQueue.poll(long, TimeUnit),以及 返回的值code>System.nanoTime()System.currentTimeMillis()

据我了解,Java 应用程序至少可以访问两个大部分独立的时钟:

  • System.currentTimeMillis(),它基本上是挂钟时间,这也意味着用户和系统软件就像一个NTP守护进程可能会不时地摆弄它,可能导致该值在任何方向和数量上跳跃。
  • System.nanoTime() 保证单调且或多或少稳定增加,但可能会因处理器时钟频率不太准确和节电机制导致的伪影而漂移。

现在我明白像 Thread.sleep() 这样的库函数需要依赖一些平台相关的接口(interface)来挂起一个线程,直到指定的时间过去了,但是假设是安全的这些函数测量的时间是基于 System.nanoTime() 的值吗?

我知道这些函数中没有一个能保证比几毫秒更准确地测量时间,但我对很长时间(如数小时)的等待很感兴趣。 IE。如果我调用 Thread.sleep(10 * 3600 * 1000) 两个时钟之间测量的时间可能相差几分钟,但我假设其中一个将在几分之一秒内要求 10 小时。如果两个时钟中的任何一个是,我假设它是 System.nanoTime() 使用的时钟。这些假设是否正确?

最佳答案

不,假设 Thread.sleep 基于 System.nanoTime 是不安全的。

Java 依赖操作系统来执行线程调度,它无法控制操作系统如何执行它。

关于java - Thread.sleep() 是否使用与 System.nanoTime() 相同的时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26060498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com