编程语言
首页 > 编程语言> > java – wait()和sleep()之间的区别

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