ホームページ  >  記事  >  Java  >  Java における wait()、notify()、notifyAll() メソッドの重要性は何ですか?

Java における wait()、notify()、notifyAll() メソッドの重要性は何ですか?

WBOY
WBOY転載
2023-09-04 09:57:061334ブラウズ

Java における wait()、notify()、notifyAll() メソッドの重要性は何ですか?

スレッドは、Java の wait()、notify() 、および notifyAll() メソッドを通じて相互に通信できます。これらは、Object クラスで定義された 最終 メソッドであり、 同期された コンテキストからのみ呼び出すことができます。 wait() メソッドを使用すると、現在のスレッドは、別のスレッドがオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで待機します。 notify() メソッド このオブジェクトのモニターを待機している単一のスレッドを起動します。 notifyAll() メソッド オブジェクト モニターを待機しているすべてのスレッドを起動します。スレッドは、wait() メソッドの 1 つを呼び出して、オブジェクトのモニターを待機します。現在のスレッドがオブジェクト モニターの所有者ではない場合、これらのメソッドは IllegalMonitorStateException をスローする可能性があります。

wait() メソッドの構文

public final void wait() throws InterruptedException

notify() メソッドの構文

public final void notify()

NotifyAll() メソッドの構文

public final void notifyAll()<strong>
</strong>

Example

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 サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。