Java中的Wait和Sleep之间的区别

Wait()-线程释放此监视器的所有权,并等待直到另一个线程通知该对象的监视器上正在等待通过调用notify()方法或notifyAll()方法唤醒的线程。然后,线程等待,直到它可以重新获得监视器的所有权并恢复执行。

Sleep()-此方法使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。该线程不会失去任何监视器的所有权。它将在指定的时间内将当前线程发送到“不可运行”状态。

序号等待睡觉
1
类 
Wait()方法属于Object类 
Sleep()方法属于Thread类 
2
锁释放 
Wait()释放对象上的锁 
它不会释放对对象的锁定 
3
调用上下文
可以在对象本身上调用Wait() 
可以在线程上调用Sleep() 
4。
唤醒条件
直到通话notify()notifyAll()从对象
直到至少时间到期或通话中断
5
虚假唤醒 
程序可能会虚假唤醒 
它不会产生虚假的唤醒。

SynchronizedMap的示例

synchronized(lockedObject){
   while(condition == true){
      lockedObject.wait() //releases lockedObject lock
   }
   Thread.sleep(100); //puts current thread on Sleep
}