Java でオブジェクト メソッドを正しく使用する方法: wait と Notice
Java では、wait と Notice は、複数のスレッド間のコラボレーションを実現するために使用される重要なメソッドです。これら 2 つの方法を正しく使用すると、競合状態やデッドロックなどのマルチスレッドの問題を回避し、プログラムの安全性と効率性を確保できます。この記事では、Java でオブジェクト メソッドの wait および notification を正しく使用する方法を紹介し、具体的なコード例を示します。
1. wait と Notice の基本原理と機能
wait と Notify の正しい使用方法を理解する前に、その基本原理と機能を理解する必要があります。
2. 待機と通知を正しく使用する手順
待機と通知を正しく使用するには、次の手順に従う必要があります。
3. 具体的なコード例
次のコード例は、wait と Notice を正しく使用して 2 つのスレッド間のコラボレーションを実現する方法を示しています。 1 つのスレッドはウェイクアップを待機する責任を負い、もう 1 つのスレッドはウェイクアップする責任を負います。
public class WaitNotifyExample { private static final Object lock = new Object(); private static boolean isReady = false; public static void main(String[] args) { Thread waitingThread = new Thread(() -> { synchronized (lock) { while (!isReady) { try { System.out.println("等待中..."); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("等待结束!"); } }); Thread notifyingThread = new Thread(() -> { synchronized (lock) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("唤醒等待的线程..."); isReady = true; lock.notify(); } }); waitingThread.start(); notifyingThread.start(); } }
上記のコードを実行すると、待機中のスレッドが待機状態になり、目覚めた後に実行を継続することがわかります。
この例では、共有ブール変数 isReady を使用して待機状態を表します。待機中のスレッドはクリティカル セクションに入る前に isReady をチェックし、条件が満たされない場合は wait メソッドを呼び出して待機状態に入ります。ウェイクアップ スレッドが条件を満たした後、isReady の値を変更し、notify メソッドを呼び出して待機中のスレッドをウェイクアップします。
待機と通知を使用する場合は、スレッドが同じオブジェクトのロックを確実に取得する必要があることに注意してください。そうしないと、スレッドは適切に待機状態に入ることができず、起動することもできません。
概要
wait メソッドと Notice メソッドを使用すると、複数のスレッド間のコラボレーションを実現し、プログラムの安全性と効率性を確保できます。これら 2 つのメソッドを使用する場合は、ロック、wait メソッドの呼び出し、条件の確認、ロックの解放、notify メソッドの呼び出しなどの正しい手順に従う必要があります。 wait メソッドとnotify メソッドを合理的に使用することで、マルチスレッドの問題を回避し、プログラムの信頼性と保守性を向上させることができます。
以上がJava でオブジェクト メソッド wait と notification を正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。