Java の "wait()" と "sleep()" の違いを理解する
Java のスレッドには 2 つの重要なメソッドがありますスレッド同期の場合:「wait()」と「sleep()」。これらのメソッドの違いを認識することは、スレッドの実行を効果的に管理するために不可欠です。
主な違い
-
リソース制御: "wait ()" は現在のオブジェクトのロックを解放し、別のスレッドの呼び出しによってスレッドを起動できるようにします。 「通知()」。一方、「sleep()」はオブジェクトに対するスレッドのロックを保持します。
-
CPU 消費: 「wait()」を使用すると、CPU を消費せずにスレッドが休止状態に入ることができます。サイクルが切り替わり、エネルギー効率が向上します。対照的に、「sleep()」は、指定されたスリープ期間中に CPU サイクルを消費します。
なぜ両方のメソッドがあるのですか?
Java は両方の「wait」を提供します。 ()」と「sleep()」は特定の用途に対応しますcase:
-
"wait()": スレッドがイベントまたは条件の発生を待つ必要がある場合に使用されます。オブジェクトのロックを解放して、他のスレッドが続行できるようにします。
-
"sleep()": スレッドが指定された期間、実行を一時的に停止する必要がある場合に使用されます。オブジェクトのロックを維持し、スレッドの安全性を確保しますが、CPU リソースを消費します。
実装の詳細
実装レベルでは、「wait()」 「」と「sleep()」は異なりますメカニズム:
-
"wait()": オブジェクトの "wait()" メソッドを呼び出します。これにより、スレッドがオブジェクトに関連付けられた待機プールに入れられます。
-
"sleep()": Thread クラスの静的メソッドを使用します。 「sleep(long millis)」。指定されたミリ秒数の間、スレッドを一時停止します。
ベスト プラクティス
「」からの偽のウェイクアップを回避するにはwait()" の場合は、条件付き待機テクニックを使用することをお勧めします:
synchronized (mon) {
while (!condition) {
mon.wait();
}
}
以上がJava の `wait()` メソッドと `sleep()` メソッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。