Méthode notifyAll() de la classe Object en Java

Java String类Classe Object de Java


La méthode notifyAll() de Object est utilisée pour réveiller tous les threads en attente sur cet objet.

La méthode notifyAll() est similaire à la méthodenotify(),La différence est que la méthode notifyAll() réveille tous les threads en attente sur le moniteur de cet objet, tandis que la méthode notify() réveille un thread.

Si le thread courant n'est pas le propriétaire du moniteur de l'objet, l'appel de la méthode notifyAll() lèvera également une exceptionIllegalMonitorStateException.

Syntaxe

public final void notifyAll()

Parameters

  • Aucune 。

Valeur de retour

Aucune valeur de retour.

Exemple

L'exemple suivant montre l'utilisation de la méthode notifyAll() :

Exemple

import java.util.Collections; import java.util.LinkedList; import java.util.List; public class ExampleTest { 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!

Java String类Classe Object de Java

Autres extensions