Javaでsleepとwaitの違いは何ですか?
Javaで使われるsleepとwaitは、スレッドの実行を制御するための方法ですが、その目的や動作は異なります。
- 寝る方法:
- sleepメソッドはThreadクラスの静的メソッドであり、現在のスレッドを一時停止させ、その後再開するために使用されます。
- sleepメソッドを呼び出すと、オブジェクトのロックが解放されず、したがって他のスレッドはそのオブジェクトにアクセスできません。
- sleepメソッドの引数は、ミリ秒単位の時間です。スレッドはその時間の間、常に実行を一時停止します。
- 待ち方:
- waitメソッドは、Objectクラスのメソッドであり、スレッドがオブジェクトのロックを一時的に放棄して待機状態に入るためのものです。
- waitメソッドを呼び出すと、オブジェクトのロックが解放され、他のスレッドが入って実行できるようになります。
- waitメソッドは、notifyまたはnotifyAllメソッドで待機中のスレッドを起こさないと、スレッドは常に待機状態にとどまります。
- 待機方法は、タイムアウト時間を指定することができ、その時間内に起き上がる通知を受け取らない場合は、スレッドが自動的に起きます。
まとめ:
- sleepメソッドはThreadクラスのメソッドであり、waitメソッドはObjectクラスのメソッドです。
- sleepメソッドはオブジェクトのロックを解放しませんが、waitメソッドはオブジェクトのロックを解放します。
- sleepメソッドの時間は固定で、waitメソッドではタイムアウト時間を設定できます。
- sleepメソッドは呼び出しできるが、waitメソッドはnotifyまたはnotifyAllメソッドで呼び出す必要があります。