ホームページ >Java >&#&チュートリアル >Java のオブジェクト メソッドの詳細な分析: 待機と通知
Java のオブジェクト メソッド: wait と Notice の詳細な説明
Java では、オブジェクト メソッド wait と Notice は、スレッド間のコラボレーションと通信のための重要なツールです。これらは、スレッドが他のスレッドの実行を待機したり、適切なタイミングで起動したりするのに役立ちます。この記事では、wait メソッドと Notice メソッドの使用方法を詳しく紹介し、具体的なコード例を示します。
1. wait メソッドの使用
wait メソッドは、他のスレッドが同じオブジェクトの Notice メソッドを呼び出すか、notifyAll メソッドによってウェイクアップされるまで、現在のスレッドを待機状態にするために使用されます。上。 wait メソッドの形式は次のとおりです。
wait メソッドを使用する場合は、オブジェクトを確実にロックするために同期されたコード ブロックにこのメソッドを含める必要があります。以下は典型的な例です。
public class WaitNotifyExample { private boolean flag = false; public synchronized void waitForFlag() { try { while (!flag) { wait(); // 当前线程等待 } } catch (InterruptedException e) { e.printStackTrace(); } // 执行其他操作 } public synchronized void setFlag() { flag = true; notify(); // 唤醒正在等待的线程 } }
上の例では、waitForFlag メソッドを呼び出した後、他のスレッドが setFlag メソッドを呼び出してスレッドを起動するまで、スレッドは待機状態になります。
2. notification メソッドの使用
notify メソッドは、待機中のスレッドをウェイクアップするために使用されます。ウェイクアップするスレッドがランダムに選択されます。複数のスレッドが待機している場合は、そのうちの 1 つだけをウェイクアップできます。通知メソッドの使用形式は次のとおりです。
public class NotifyExample { public synchronized void waitForNotify() { try { wait(); // 当前线程等待 } catch (InterruptedException e) { e.printStackTrace(); } // 执行其他操作 } public synchronized void notifyThread() { notify(); // 唤醒一个等待的线程 } }
上記の例では、waitForNotify メソッドを呼び出したスレッドは、他のスレッドが通知スレッド メソッドを呼び出して起動するまで待機状態になります。
3. スレッド間コラボレーションを実現するために待機と通知を使用する
待機メソッドと通知メソッドは、プロデューサー/コンシューマー モデルなどのマルチスレッド コラボレーション シナリオでよく使用されます。
public class ProducerConsumerExample { private LinkedList<Integer> buffer = new LinkedList<>(); private final int MAX_SIZE = 10; public synchronized void produce() { while (buffer.size() == MAX_SIZE) { try { wait(); // 缓冲区已满,生产者线程等待 } catch (InterruptedException e) { e.printStackTrace(); } } buffer.add(1); notifyAll(); // 唤醒等待的消费者线程 } public synchronized void consume() { while (buffer.size() == 0) { try { wait(); // 缓冲区为空,消费者线程等待 } catch (InterruptedException e) { e.printStackTrace(); } } buffer.removeFirst(); notifyAll(); // 唤醒等待的生产者线程 } }
上の例では、バッファがいっぱいになると、コンシューマ スレッドがバッファ内のコンテンツを消費するまで、プロデューサー スレッドは待機状態に入ります。プロデューサーのスレッドを上げます。バッファが空の場合、コンシューマ スレッドは、プロデューサ スレッドが新しい要素を生成してコンシューマ スレッドをウェイクアップするまで待機状態になります。
概要: wait メソッドと Notice メソッドは、Java でのスレッドのコラボレーションと通信のための重要なツールです。これらはマルチスレッド プログラミングにおいて重要な役割を果たします。 wait メソッドとnotify メソッドを適切に使用することで、スレッド間の洗練されたコラボレーションと通信を実現できます。
以上がJava のオブジェクト メソッドの詳細な分析: 待機と通知の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。