public class ProducerConsumerExample { private List<Integer> buffer = new ArrayList<>(); private int maxSize = 5; public synchronized void produce() throws InterruptedException { while (buffer.size() == maxSize) { wait(); } Random random = new Random(); int value = random.nextInt(100); buffer.add(value); System.out.println("Produced: " + value); notifyAll(); } public synchronized void consume() throws InterruptedException { while (buffer.size() == 0) { wait(); } int value = buffer.remove(0); System.out.println("Consumed: " + value); notifyAll(); } }この例では、ProducerConsumerExample クラスはプロデューサーとコンシューマーのロジックを実装します。 。プロデュース メソッドでは、バッファがいっぱいの場合、コンシューマがデータを消費し、notifyAll メソッドを呼び出して待機中のプロデューサー スレッドを起動するまで、スレッドは待機状態になります (wait メソッドを呼び出します)。同様に、consumption メソッドでは、バッファーが空の場合、プロデューサーがデータを生成し、notifyAll メソッドを呼び出して待機中のコンシューマー スレッドを起動するまで、スレッドは待機状態に入ります。 3.2 スレッドのコラボレーション 場合によっては、複数のスレッドを特定の順序で実行する必要がある場合があり、1 つのスレッドが特定のタスクを完了した後、次のスレッドに実行を継続するように通知する必要があります。このシナリオでは、wait メソッドと notification メソッドを使用してスレッドのコラボレーションを実現することもできます。 次は、wait メソッドと Notice メソッドを使用してスレッド コラボレーションを実現する方法を示す簡単な例です。
public class ThreadCooperationExample { private boolean isTask1Completed = false; public synchronized void task1() throws InterruptedException { while (!isTask1Completed) { wait(); } System.out.println("Task 1 completed"); } public synchronized void task2() { System.out.println("Task 2 started"); // 执行任务2的代码 isTask1Completed = true; notify(); } }この例では、ThreadCooperationExample クラスは 2 つのタスク task1 と task2 を実装します。 task1 では、スレッドは isTask1Completed のステータスを継続的にチェックし、それが false の場合は、task2 が isTask1Completed を true に設定し、notify メソッドを呼び出して待機中の task1 スレッドを起動するまで待機状態になります (wait メソッドを呼び出します)。
以上がJavaのwaitとnotifyの実践的な応用例を徹底解説:スレッド間通信の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。