スレッドは、Java の wait()、notify() 、および notifyAll() メソッドを通じて相互に通信できます。これらは、Object クラスで定義された 最終 メソッドであり、 同期された コンテキストからのみ呼び出すことができます。 wait() メソッドを使用すると、現在のスレッドは、別のスレッドがオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで待機します。 notify() メソッド このオブジェクトのモニターを待機している単一のスレッドを起動します。 notifyAll() メソッド オブジェクト モニターを待機しているすべてのスレッドを起動します。スレッドは、wait() メソッドの 1 つを呼び出して、オブジェクトのモニターを待機します。現在のスレッドがオブジェクト モニターの所有者ではない場合、これらのメソッドは IllegalMonitorStateException をスローする可能性があります。
public final void wait() throws InterruptedException
public final void notify()
public final void notifyAll()<strong> </strong>
public class WaitNotifyTest { private static final long SLEEP_INTERVAL<strong> </strong>= 3000; private boolean running = true; private Thread thread; public void start() { print("Inside start() method"); thread = new Thread(new Runnable() { @Override public void run() { print("Inside run() method"); try { Thread.sleep(SLEEP_INTERVAL); } catch(InterruptedException e) { Thread.currentThread().interrupt(); } synchronized(WaitNotifyTest.this) { running = false; WaitNotifyTest.this.notify(); } } }); thread.start(); } public void join() throws InterruptedException { print("Inside join() method"); synchronized(this) { while(running) { print("Waiting for the peer thread to finish."); wait(); //waiting, not running } print("Peer thread finished."); } } private void print(String s) { System.out.println(s); } public static void main(String[] args) throws InterruptedException { WaitNotifyTest test = new WaitNotifyTest(); test.start(); test.join(); } }
Inside start() method Inside join() method Waiting for the peer thread to finish. Inside run() method Peer thread finished.
以上がJava における wait()、notify()、notifyAll() メソッドの重要性は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。