我正在研究计算机硬件,我们了解到使用硬件计时器可获得比软件延迟更准确的结果.我已经在汇编中写了1毫秒的软件延迟,我可以开始一个使用这个延迟重复每个毫秒的过程,并且计数器每100毫秒做一次其他事情,这种技术不如使用我的硬件计时器那么精确内置了我现在要使用的硬件.
所以我想知道用Java构建的时序有多精确?我们有System.currentTimeMillis并且Thread.sleep这些可能不使用硬件定时器,那么这些内置Java方法与硬件定时器相比有多准确?
根据这个问题,Thread.sleep不一定保证在你指定的时间内睡觉:它可能更短或更长.
如果您阅读了相关文档Thread.sleep,您会发现在确切的持续时间内没有强有力的保证.它具体说明了持续时间
受制于系统定时器和调度程序的精确性和准确性
这是(有意)模糊但暗示不应过分依赖持续时间.
特定操作系统上可能的睡眠持续时间的粒度由线程调度程序的中断周期确定.
在Windows中,调度程序的中断周期通常大约为10或15毫秒(我相信这是由处理器决定的),但可以在软件中请求更高的周期,Hotspot JVM在认为必要时会这样做
来源,强调我的
我怎样才能保证睡眠持续时间至少是我指定的值?