Rumah  >  Artikel  >  Java  >  Apakah kepentingan kaedah wait(), notify() dan notifyAll() dalam Java?

Apakah kepentingan kaedah wait(), notify() dan notifyAll() dalam Java?

WBOY
WBOYke hadapan
2023-09-04 09:57:061286semak imbas

Apakah kepentingan kaedah wait(), notify() dan notifyAll() dalam Java?

Thread boleh berkomunikasi antara satu sama lain melalui kaedah wait(), notify() dan notifyAll() di Java. Ini adalah kaedah akhir ditakrifkan dalam kelas Objek dan hanya boleh dipanggil dari konteks disegerakkan . Kaedah wait() menyebabkan thread semasa menunggu sehingga thread lain memanggil kaedah notify() atau notifyAll() objek. Kaedah notify() membangkitkan satu utas yang sedang menunggu untuk monitor objek ini. Kaedah notifyAll() membangkitkan semua rangkaian yang sedang menunggu monitor objek ini. Satu benang menunggu monitor objek dengan memanggil salah satu kaedah wait(). Kaedah ini mungkin membuang IllegalMonitorStateException jika urutan semasa bukan pemilik monitor objek.

wait() kaedah sintaks

public final void wait() throws InterruptedException

notify() kaedah sintaks

public final void notify()

NotifyAll() kaedah sintaks

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();
   }
}

output

Inside start() method
Inside join() method
Waiting for the peer thread to finish.
Inside run() method
Peer thread finished.

Atas ialah kandungan terperinci Apakah kepentingan kaedah wait(), notify() dan notifyAll() dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam