Maison  >  Article  >  Java  >  En Java, quand pouvons-nous appeler les méthodes wait() et wait(long) de Thread ?

En Java, quand pouvons-nous appeler les méthodes wait() et wait(long) de Thread ?

WBOY
WBOYavant
2023-09-03 23:41:09981parcourir

En Java, quand pouvons-nous appeler les méthodes wait() et wait(long) de Thread ?

Chaque fois que la méthode wait() est appelée sur un objet, le thread actuel attend qu'un autre thread appelle la méthode notify() ou notifyAll() sur cet objet, alors que wait( long timeout) fait attendre le thread actuel jusqu'à ce qu'un autre thread appelle la méthode notify() ou notifyAll() sur cet objet, ou que le délai d'attente spécifié soit écoulé.

wait()

Dans le programme ci-dessous, lorsque wait() est appelé sur un objet, le thread entre dans l'état d'attente à partir de l'état d'exécution. Il attend que d'autres threads appellent notify() ou notifyAll() pour entrer dans l'état exécutable, ce qui formera une impasse.

Exemple

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

wait(long)

Dans le programme ci-dessous, lorsque

wait(1000) est appelé sur l'objet, le thread entre dans l'état d'attente à partir de état d'exécution, même si si notify() ou notifyAll() n'est pas appelé après le délai d'attente, le thread entrera également dans l'état exécutable à partir de l'état waiting.

Exemple

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

Sortie

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer