Java Object wait(long timeout)-Methode

Java String类Java Object-Klasse


Die Object wait(long timeout)-Methode versetzt den aktuellen Thread in einen wartenden (blockierten) Zustand, bis ein anderer Thread dienotify()-Methode dieses Objekts aufruftodernotifyAll()-Methodeoder bis der durch den Timeout-Parameter festgelegte Timeout-Zeitraum überschritten wird.

Wenn der Timeout-Parameter 0 ist, gibt es keinen Timeout, und es wartet weiter, ähnlich wiedie wait()-Methode。

Der aktuelle Thread muss der Monitor-Eigentümer dieses Objekts sein; andernfalls wird weiterhin eineIllegalMonitorStateException-Ausnahme ausgelöst.

Wenn der aktuelle Thread von einem beliebigen Thread vor oder während des Wartens unterbrochen wird, wird eineInterruptedException-Ausnahme ausgelöst.

Wenn der übergebene Parameter ungültig ist, wird eineIllegalArgumentExceptionAusnahme ausgelöst.

Syntax

public final void wait(long timeout)

Parameters

  • timeout- Wartezeit (in Millisekunden).

Rückgabewert

Kein Rückgabewert.

Beispiel

Das folgende Beispiel demonstriert die Verwendung der Methode wait(long timeout):

Beispiel

import java.util.Collections; import java.util.LinkedList; import java.util.List; public class ExampleTest extends Object { private List synchedList; public ExampleTest() { //Synchronisierte Liste erstellen synchedList = Collections.synchronizedList(new LinkedList()); } //Ein Element aus der Liste löschen public String removeElement() throws InterruptedException { synchronized (synchedList) { //Warte, wenn die Liste leer ist while (synchedList.isEmpty()) { System.out.println("Liste ist leer..."); synchedList.wait(10000); //Wartezeit festlegen System.out.println("Warten..."); } String element = (String) synchedList.remove(0); return element; } } //Ein Element zur Liste hinzufügen public void addElement(String element) { System.out.println("Öffnen..."); synchronized (synchedList) { //Ein Element hinzufügen und benachrichtigen, dass das Element vorhanden ist synchedList.add(element); System.out.println("Neues Element:'" + element + "'"); synchedList.notifyAll(); System.out.println("notifyAll aufgerufen!"); } System.out.println("Schließen..."); } 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("Unterbrochene Ausnahme!"); } catch (Exception x) { System.out.println("Ausnahme ausgelöst."); } } }; Runnable runB = new Runnable() { //Führe die Operation zum Hinzufügen des Elements aus und starte die Schleife public void run() { demo.addElement("Hallo!"); } }; try { Thread threadA1 = new Thread(runA, "Google"); threadA1.start(); Thread.sleep(500); Thread threadA2 = new Thread(runA, "Example"); threadA2.start(); Thread.sleep(500); Thread threadB = new Thread(runB, "Taobao"); threadB.start(); Thread.sleep(1000); threadA1.interrupt(); threadA2.interrupt(); } catch (InterruptedException x) { } } }

Die Ausgabe des obigen Programms ist:

List is empty...
List is empty...
Opening...
New Element:'Hello!'
notifyAll called!
Closing...
Waiting...
Waiting...
List is empty...
Hello!
Interrupted Exception!

Java String类Java Object-Klasse

Andere Erweiterungen