java – wait()和sleep()之间的区别
作者:互联网
Threads中wait()和sleep()有什么区别?
我的理解是wait() – Thread仍处于运行模式并使用CPU周期但是sleep() – ing不会消耗任何CPU周期吗?
为什么我们同时拥有wait()和sleep():它们的实现如何在较低级别变化?
解决方法:
一个wait
可以被正在等待的另一个调用notify
的线程“唤醒”,而sleep
则不能.此外,等待(和通知)必须在监视器对象上同步的块中发生,而睡眠不会:
Object mon = ...;
synchronized (mon) {
mon.wait();
}
此时,当前正在执行的线程等待并释放监视器.另一个线程可能会
synchronized (mon) { mon.notify(); }
(在同一个mon对象上)和第一个线程(假设它是在监视器上等待的唯一线程)将被唤醒.
如果监视器上有多个线程正在等待,您也可以调用notifyAll
– 这将唤醒所有线程.但是,只有一个线程能够抓住监视器(记住等待在同步块中)并继续 – 其他线程将被阻塞,直到它们可以获取监视器的锁定.
另一点是你在Object
本身调用等待(即你在对象的监视器上等待),而你在Thread
调用sleep.
还有一点是你可以从等待中获得虚假的唤醒(即等待恢复的线程没有明显的原因).您应该总是在某些条件下旋转,如下所示:
synchronized {
while (!condition) { mon.wait(); }
}
标签:java-threads,java,multithreading,sleep 来源: https://codeday.me/bug/20190911/1803085.html