Wait()-线程释放此监视器的所有权,并等待直到另一个线程通知该对象的监视器上正在等待通过调用notify()方法或notifyAll()方法唤醒的线程。然后,线程等待,直到它可以重新获得监视器的所有权并恢复执行。
Sleep()-此方法使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。该线程不会失去任何监视器的所有权。它将在指定的时间内将当前线程发送到“不可运行”状态。
| 序号 | 键 | 等待 | 睡觉 |
|---|---|---|---|
| 1 | 类 | Wait()方法属于Object类 | Sleep()方法属于Thread类 |
| 2 | 锁释放 | Wait()释放对象上的锁 | 它不会释放对对象的锁定 |
| 3 | 调用上下文 | 可以在对象本身上调用Wait() | 可以在线程上调用Sleep() |
| 4。 | 唤醒条件 | 直到通话notify(),notifyAll()从对象 | 直到至少时间到期或通话中断 |
| 5 | 虚假唤醒 | 程序可能会虚假唤醒 | 它不会产生虚假的唤醒。 |
synchronized(lockedObject){
while(condition == true){
lockedObject.wait() //releases lockedObject lock
}
Thread.sleep(100); //puts current thread on Sleep
}