Java スレッドの "wait()" と "sleep()" の違いを理解する
Java では "wait()" 「sleep()」と「sleep()」は、スレッドの実行を制御するために使用される 2 つの主要なメソッドです。どちらもスレッドの実行を一時停止するという目的を果たしますが、操作とスコープが大きく異なります。
wait() と sleep()
-
wait(): このメソッドはオブジェクト モニターで呼び出され、現在のスレッドを待機状態にします。関連付けられたオブジェクトのロックを解放し、そのオブジェクトを他のスレッドで使用できるようにします。別のスレッドが同じオブジェクトに対して "notify()" または "notifyAll()" を呼び出すと、待機中のスレッドは通知を受けて実行を再開します。
-
sleep(): 対照的に、「sleep」 ()" はスレッド自体で呼び出されます。これにより、スレッドはスリープ状態になり、ロックは解放されません。スリープ状態のスレッドは他のスレッドに応答しないままになります。指定された時間が経過すると、スレッドは自動的に実行を再開します。
CPU 使用率
一般的な考えに反して、「wait()」と「sleep」の両方が実行されます。 ()」は CPU サイクルを消費する可能性があります。 「wait()」を待機しているスレッドはスリープ中も、モニター ロックを保持したままになります。これは、他のスレッドがオブジェクトへのアクセスを常に競合し、CPU リソースを消費する必要があることを意味します。一方、「sleep()」はスレッドのロックを解放し、他のスレッドが競合することなく実行できるようにします。
両方のメソッドの理論的根拠
Java に「wait()」と「sleep()」の両方があるのは、それぞれの異なる役割とさまざまな機能への適合性に由来します。
-
Wait(): このメソッドは、スレッドが条件やイベントに基づいて通信し、実行を同期する必要がある状況を対象としています。これにより、スレッドは続行する前に特定のイベントが発生するまで待機できるようになり、調整とコラボレーションが可能になります。
-
Sleep(): 対照的に、「sleep()」は通常、遅延や一時停止を導入するために使用されます。スレッド実行時。これにはスレッド間通信やロックが含まれず、スレッドが続行する前に事前定義された期間遅延する必要があるシナリオに適しています。
低レベル実装
下位レベルでは、「wait()」と「sleep()」は異なるメソッドを使用して実装されます。
-
Wait(): このメソッドは、その実装を基礎となるプラットフォームに委任します。通常、これはカーネル内でスレッドの実行をブロックし、CPU シェアを放棄させます。
-
Sleep(): 対照的に、「sleep()」はノンブロッキング実装を使用します。スレッドのタイムアウトを設定し、タイムアウトが経過したかどうかを定期的にチェックします。そうでない場合、スレッドは実行を継続します。
以上がJava スレッド制御の「wait()」と「sleep()」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。