(重复:有很多关于wait()vs sleep()的问题,但是我需要这个具体细节,我在答案中找不到任何问题。 )
背景:
我有一个使用sleep()
实现的调度程序,但我希望将其实现更改为使用wait(timeout)
,以便更好地控制"唤醒"它,使用notify()
在精确对象上而不是interrupt()
。
主要优点是内容代码(可以包含其他sleep()
,其他wait()
,阻塞I / O等,在同一个线程中,可能来自各种库等。)不必确保给定的中断管理。 通知特定对象我确定只唤醒该特定wait()
,并且对该帖子中的其他代码完全没有影响。
使用wait(timeout)
+ notify()
似乎是确保不破坏线程中任何其他代码的最佳方法。
只有调度程序线程和可能要求唤醒的线程可以争用该特定对象的锁定,因此获取锁定不应该是有形延迟。
至于虚假的唤醒,我认为我可以测试实际经过的时间,并在需要时再次等待。 (这可以防止"暂停时间太少"但不会反对"太多时间暂停"因此问题。)
问题:
我可以假设,在任何JVM左右,wait(timeout)
至少与sleep(timeout)
一样精确,暂停超时毫秒,尽可能精确吗? < / p>
此外,问题是&#34;虚假的唤醒&#34;来自wait()
目前还有sleep()
?
换句话说:暂停超时毫秒,对于以下内容,使用wait(timeout)
而不是sleep(timeout)
时有任何不足吗?
必须获得锁定(在上下文中可能忽略不计)
防止虚假唤醒(假设sleep()
免疫,确认?)
我是否应该预计调度精度会有任何下降?
请再次注意,主要目标是等待超时毫秒,我使用wait(timeout)
作为sleep()
可以以更易于管理的方式唤醒,而不会破坏任何其他该线程中的代码。