wait()和sleep()之间的区别

问题:

线程中wait()sleep()的区别是什么?
我的理解是,wait()的线程仍然处于运行模式并使用CPU周期,但是sleep() -ing不会消耗任何CPU周期的正确性?
为什么我们有both wait()sleep():他们的实施在较低的水平上有所不同?

回答:

可以通过正在等待的监视器上的另一个线程“1”来唤醒wait,而sleep不能。 wait(和notify)必须在监视器对象的块synchronized中发生,而sleep则不会:

Object mon = ...;
synchronized (mon) {
    mon.wait();
} 

此时,正在执行的线程等待and releases the monitor。另一个线程可以做

synchronized (mon) { mon.notify(); }

(在同一个mon对象上)和第一个线程(假设它是在监视器上等待的唯一线程)将被唤醒。
如果多个线程在显示器上等待,您也可以调用notifyAll,这将唤醒all of them up。但是,只有其中一个线程才能抓住监视器(记住waitsynchronized块中)并继续进行,然后其他线程将被阻止,直到获取显示器的锁定为止。
另一点是你在Object上调用wait(即你在对象的显示器上等待),而在Thread上调用sleep
另一点是,您可以从wait获取spurious wakeups(即等待恢复的线程没有明显的原因)。你应该总是如下:

synchronized {
    while (!condition) { mon.wait(); }
}

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Difference between wait() and sleep()

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

32 − = 25