Java Object wait(long timeout)-Methode
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
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() {
synchedList = Collections.synchronizedList(new LinkedList());
}
public String removeElement() throws InterruptedException {
synchronized (synchedList) {
while (synchedList.isEmpty()) {
System.out.println("Liste ist leer...");
synchedList.wait(10000);
System.out.println("Warten...");
}
String element = (String) synchedList.remove(0);
return element;
}
}
public void addElement(String element) {
System.out.println("Öffnen...");
synchronized (synchedList) {
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() {
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 Object-Klasse
Andere Erweiterungen