Java Object wait(long timeout) Method
Java Object Class
The Object wait(long timeout) method causes the current thread to be in a waiting (blocked) state until another thread calls this object'snotify() methodornotifyAll() methodor until the timeout period set by the timeout parameter is exceeded.
If the timeout parameter is 0, there will be no timeout, and it will keep waiting, similar tothe wait() method。
The current thread must be the monitor owner of this object; otherwise, an exception will still be thrownIllegalMonitorStateExceptionexception.
If the current thread is interrupted by any thread before or while waiting, it will throwInterruptedExceptionan exception.
If the passed parameter is illegal, it will throwIllegalArgumentExceptionan exception.
Syntax
public final void wait(long timeout)
Parameters
Return Value
No return value.
Example
The following example demonstrates the use of the wait(long timeout) method:
Example
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("List is empty...");
synchedList.wait(10000);
System.out.println("Waiting...");
}
String element = (String) synchedList.remove(0);
return element;
}
}
public void addElement(String element) {
System.out.println("Opening...");
synchronized (synchedList) {
synchedList.add(element);
System.out.println("New Element:'" + element + "'");
synchedList.notifyAll();
System.out.println("notifyAll called!");
}
System.out.println("Closing...");
}
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("Interrupted Exception!");
} catch (Exception x) {
System.out.println("Exception thrown.");
}
}
};
Runnable runB = new Runnable() {
public void run() {
demo.addElement("Hello!");
}
};
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) {
}
}
}
The output of the above program is:
List is empty...
List is empty...
Opening...
New Element:'Hello!'
notifyAll called!
Closing...
Waiting...
Waiting...
List is empty...
Hello!
Interrupted Exception!
Java Object Class
Other Extensions