English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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() //lockedObjectのロックを解放します
   }
   Thread.sleep(100); //現在のスレッドをSleepに置きます
}