Maison > Java > javaDidacticiel > 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
Libérer: 2023-09-03 23:41:09
avant
1006 Les gens l'ont consulté

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();
   }
}
Copier après la connexion

output

In run() method
Copier après la connexion

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();
   }
}
Copier après la connexion

Sortie

In run() method
Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal