Méthode Java Object wait(long timeout, int nanos)

Java String类Classe Object de Java


La méthode Object wait(long timeout, int nanos) place le thread actuel dans un état d'attente (bloqué) jusqu'à ce qu'un autre thread appelle la méthode notify() ou notifyAll() de cet objet, ou jusqu'à ce que le délai d'attente défini par les paramètres timeout et nanos soit dépassé.

Cette méthode est similaire à la méthodewait(long timeout)mais possède un paramètre nanos supplémentaire, qui représente un temps supplémentaire (en nanosecondes, plage 0-999999). Ainsi, le délai d'attente doit également ajouter nanos nanosecondes.

Si les paramètres timeout et nanos valent tous les deux 0, il n'y a pas de timeout et l'attente se poursuit indéfiniment, comme pour la méthodewait()。

Le thread actuel doit être le propriétaire du moniteur de cet objet, sinon uneIllegalMonitorStateExceptionexception se produira toujours.

Si le thread actuel est interrompu par n'importe quel thread avant ou pendant l'attente, il lèvera uneInterruptedExceptionexception.

Si les paramètres passés sont invalides ou si nanos n'est pas dans la plage 0-999999, il lèvera uneIllegalArgumentExceptionexception.

Syntaxe

public final void wait(long timeout, int nanos)

Parameters

  • timeout- Le temps d'attente (en millisecondes).

  • nanos- Le temps d'attente supplémentaire (en nanosecondes).

Valeur de retour

Aucune valeur de retour.

Exemple

L'exemple suivant montre l'utilisation de la méthode wait(long timeout, int nanos) :

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 des éléments de la liste public String removeElement() throws InterruptedException { synchronized (synchedList) { //Si la liste est vide, attendez 10 secondes plus 500 nanosecondes while (synchedList.isEmpty()) { System.out.println("La liste est vide..."); synchedList.wait(10000, 500); System.out.println("En attente..."); } String element = (String) synchedList.remove(0); return element; } } //Ajouter des éléments à 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) { } } }

Le résultat de l'exécution 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