Méthode wait() de l'objet Java
La méthode wait() de Object fait entrer le thread courant dans l'état d'attente. Jusqu'à ce qu'un autre thread appelle la méthodenotify() de cet objetoula méthode notifyAll() de cet objet.。
Le thread courant doit être le propriétaire du moniteur de cet objet, sinon uneIllegalMonitorStateExceptionexception sera levée.
Si le thread courant est interrompu par un thread quelconque avant ou pendant l'attente, uneInterruptedExceptionexception sera levée.
Syntaxe
public final void wait()
Parameters
Aucune 。
Valeur de retour
Aucune valeur de retour.
Exemple
L'exemple suivant montre l'utilisation de la méthode wait() :
Exemple
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class ExampleTest extends Object {
private List synchedList;
public ExampleTest() {
//Créer une liste synchronisée
synchedList = Collections.synchronizedList(new LinkedList());
}
//Supprimer un élément de la liste
public String removeElement() throws InterruptedException {
synchronized (synchedList) {
//Attendre si la liste est vide
while (synchedList.isEmpty()) {
System.out.println("La liste est vide...");
synchedList.wait();
System.out.println("En attente...");
}
String element = (String) synchedList.remove(0);
return element;
}
}
//Ajouter un élément à la liste
public void addElement(String element) {
System.out.println("Ouverture...");
synchronized (synchedList) {
//Ajouter un élément et notifier que l'élément existe
synchedList.add(element);
System.out.println("Nouvel élément:'" + element + "'");
synchedList.notifyAll();
System.out.println("notifyAll appelé!");
}
System.out.println("Fermeture...");
}
public static void main(String[] args) {
final ExampleTest demo = new ExampleTest();
Runnable runA = new Runnable() {
public void run() {
try {
String item = demo.removeElement();
System.out.println("" + item);
} catch (InterruptedException ix) {
System.out.println("Exception interrompue !");
} catch (Exception x) {
System.out.println("Exception levée.");
}
}
};
Runnable runB = new Runnable() {
//Effectuez l'opération d'ajout d'élément et démarrez la boucle
public void run() {
demo.addElement("Bonjour !");
}
};
try {
Thread threadA1 = new Thread(runA, "Google");
threadA1.start();
Thread.sleep(500);
Thread threadA2 = new Thread(runA, "Exemple");
threadA2.start();
Thread.sleep(500);
Thread threadB = new Thread(runB, "Taobao");
threadB.start();
Thread.sleep(1000);
threadA1.interrupt();
threadA2.interrupt();
} catch (InterruptedException x) {
}
}
}
La sortie du programme ci-dessus est :
List is empty... List is empty... Opening... New Element:'Hello!' notifyAll called! Closing... Waiting... Waiting... List is empty... Hello! Interrupted Exception!
Autres extensions
Classe Object de Java