Rumah  >  Artikel  >  Java  >  Di Jawa, bilakah kita boleh memanggil kaedah wait() dan wait(long) Thread?

Di Jawa, bilakah kita boleh memanggil kaedah wait() dan wait(long) Thread?

WBOY
WBOYke hadapan
2023-09-03 23:41:09979semak imbas

Di Jawa, bilakah kita boleh memanggil kaedah wait() dan wait(long) Thread?

Apabila kaedah wait() dipanggil pada objek, ia menyebabkan thread semasa menunggu sehingga thread lain memanggil kaedah notify() atau notifyAll( ) pada objek itu, manakala wait( tamat masa yang lama) menyebabkan utas semasa menunggu sehingga urutan lain memanggil kaedah notify() atau notifyAll( ) pada objek ini, atau tempoh tamat masa yang ditentukan telah berlalu.

wait()

Dalam program di bawah, apabila wait() dipanggil pada objek, benang memasuki keadaan menunggu dari keadaan berjalan. Ia menunggu urutan lain untuk memanggil notify() atau notifyAll() untuk memasuki keadaan runnable, yang akan membentuk deadlock.

Contoh

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
            this.wait();
            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithoutParameterTest {
   public static void main(String[] args) {
       MyRunnable myRunnable = new MyRunnable();
       Thread thread = new Thread(myRunnable, "Thread-1");
       thread.start();
   }
}

output

In run() method

tunggu(lama)

Dalam atur cara di bawah, apabila

tunggu(1000) dipanggil pada objek menunggu, nyatakan benang dari runut walaupun Jika notify() atau notifyAll() tidak dipanggil selepas tempoh tamat masa, thread juga akan memasuki keadaan runnable daripada keadaan menunggu. Contoh

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
<strong>            this.wait(1000); 
</strong>            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithParameterTest {
   public static void main(String[] args) {
      MyRunnable myRunnable = new MyRunnable();
      Thread thread = new Thread(myRunnable, "Thread-1");
      thread.start();
   }
}

Output

In run() method
Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()

Atas ialah kandungan terperinci Di Jawa, bilakah kita boleh memanggil kaedah wait() dan wait(long) Thread?. 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