Javaスレッドの「スリープ」と「ウェイト」の違いは何ですか

Javaのスレッドのsleepメソッドとwaitメソッドの違いは以下の通りです。

  1. waitメソッドを呼び出したスレッドは自らのロックを解除して待機状態に移行する。別のスレッドが同じオブジェクトでnotifyまたはnotifyAllメソッドを呼び出して起床させるまで。一方、sleepメソッドを呼び出したスレッドは一時的に実行を中断するものの、保持しているロックは保持する。
  2. waitメソッドは同期ブロックや同期メソッド内で呼び出す必要があるが、sleepメソッドは任意の場所から呼び出すことができる。
  3. スレッドクラスのsleepメソッドは静的メソッドですが、オブジェクトクラスのwaitメソッドはメソッドです。
  4. sleepメソッドのパラメーターはスレッドを一時停止する時間をミリ秒単位で指定し、waitメソッドはタイムアウトパラメーターを指定してスレッドの待機時間を指定できます。
  5. sleep メソッドはスレッドクラスのスタティックメソッドで、オブジェクトロックを取得せずに任意の場所から呼び出すことができる。一方、wait メソッドは Object クラスのインスタンスメソッドで、オブジェクトロックを取得した状態でのみ呼び出すことができる。
  6. スレッドがsleepメソッドを呼び出すと、スリープ時間終了時までロックを保持し続けます。一方、スレッドがwaitメソッドを呼び出すと、ロックを解放して待ち状態になり、呼び出されるまで待機します。

スレッドのsleepメソッドは、待機するスレッドの実行を一時停止し、ロックを解放せずに、waitメソッドがスレッド間の通信に用いられ、ロックが解放されます。

bannerAds