ホームページ >Java >&#&チュートリアル >Java でのオブジェクト メソッドの wait および notification の内部実装メカニズムを調査する
Java のオブジェクト メソッドの深い理解: 待機と通知の基本的な実装原則には、特定のコード例が必要です
Java のオブジェクト メソッドwait
と notify
は、スレッド間通信の実装に使用される主要なメソッドであり、その基礎となる実装原則には Java 仮想マシンの監視メカニズムが関係します。この記事では、これら 2 つのメソッドの基本的な実装原則を詳しく説明し、具体的なコード例を示します。
まず、wait
と notify
の基本的な使用法を理解しましょう。 wait
メソッドの機能は、他のスレッドがオブジェクトの notify
メソッドを呼び出してオブジェクトを起動するまで、現在のスレッドがオブジェクトのロックを解放し、待機状態になることです。 notify
メソッドは、オブジェクトを待機しているスレッドを起動し、実行可能状態に再び戻すために使用されます。
以下では、特定のコード例を使用して、wait
メソッドと notify
メソッドの使用法と基本的な実装原則を説明します。
public class WaitNotifyExample { public static void main(String[] args) { final Object lock = new Object(); // 线程A Thread threadA = new Thread(() -> { synchronized (lock) { try { System.out.println("ThreadA: 开始执行"); lock.wait(); // 线程A进入等待状态 System.out.println("ThreadA: 被唤醒,继续执行"); } catch (InterruptedException e) { e.printStackTrace(); } } }); // 线程B Thread threadB = new Thread(() -> { synchronized (lock) { System.out.println("ThreadB: 开始执行"); lock.notify(); // 唤醒等待的线程A System.out.println("ThreadB: 调用notify方法,结束"); } }); threadA.start(); threadB.start(); } }
上記のコードでは、ウェイクアップを待機する例を作成します。スレッド A は wait
メソッドを呼び出して待機状態に入り、スレッド B は メソッドを呼び出して待機状態になります。 Notice
メソッドはスレッド A を起動します。上記のコードを実行すると、スレッド A が待機状態から復帰した後も実行を継続していることがわかります。
基本的な使用法を理解した後、wait
と notify
の基礎となる実装原則を調べてみましょう。 Java 言語では、各オブジェクトに関連付けられたモニターがあり、これは実際にはオブジェクト ヘッダーの一部です。スレッドがオブジェクトの wait
メソッドを呼び出すと、スレッドはオブジェクトのロックを解放して待機状態に入り、自身をオブジェクトの待機キューに追加します。他のスレッドがオブジェクトの notify
メソッドを呼び出すと、JVM は待機キューからスレッドを選択してウェイクアップします。目覚めたスレッドはオブジェクトのロックを取得するまで待機し続けることに注意してください。ロックを取得した後でのみ、wait
メソッドから戻って実行を続行できます。
wait
メソッドと notify
メソッドを実行するときは、最初にオブジェクトのロックを取得する必要があります。取得しないと、IllegalMonitorStateException
例外がスローされます。したがって、これら 2 つのメソッドは synchronized
ブロックまたはメソッド内で使用する必要があります。
wait
メソッドと notify
メソッドは、同じクラスの異なるインスタンスであっても、同じオブジェクトに対してのみ操作できることに注意してください。また、notify
メソッドは待機キュー内の 1 つのスレッドのみをウェイクアップできるため、複数のスレッドが待機している場合、どのスレッドをウェイクアップするかは不明です。
要約すると、wait
メソッドと notify
メソッドは Java でスレッド間通信を実現するための重要なメソッドであり、その基本的な実装原則には Java のモニターが含まれます。仮想マシンのメカニズム。 wait
メソッドと notify
メソッドを適切に使用することで、複数のスレッド間の同期と相互排他を実現でき、それによってプログラムのパフォーマンスを向上させながらスレッドの安全性を確保できます。
この記事が、Java のオブジェクト メソッド wait
と notify
の基本的な実装原則を理解するのに役立つことを願っています。これについてまだ質問がある場合は、さらに詳しく学習してください。
以上がJava でのオブジェクト メソッドの wait および notification の内部実装メカニズムを調査するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。