Javaでawaitとwaitの違いは何ですか

Javaではawaitとwaitのどちらもスレッドの同期に使用されるが、2つにはいくつかの違いがある。

  1. awaitはJDK5より導入されたConditionインタフェースに定義されたメソッドで、条件変数が真になるまで待機する。一方、waitはObjectクラスに定義されたメソッドで、スレッドが呼び出されるまで待機する。
  2. awaitは必ずあるロックの保持者で呼ぶ必要があるので、具体的にはReentrantLockのlockメソッド内でawaitを呼ぶ必要があり、waitは任意のオブジェクトで呼ぶことが許されています。
  3. awaitは必ずtry-catchブロックで行うのに対し、waitはsynchronizedブロック中で呼び出せるが、例外処理はsynchronizedブロックで行う
  4. waitは他のスレッドによるnotifyやnotifyAllメソッドの呼び出しによって待機中のスレッドをウェイクアップすることができますが、awaitは条件変数が満たされた時に、signalやsignalAllメソッドを能動的に呼び出すことで待機中のスレッドをウェイクアップします。

概して await と wait はどちらのスレッド同期にも使用できますが、使用できる状況が異なります。await は ReentrantLock の条件待機に適していますが、wait は Object の待機/再開機構により適しています。

bannerAds