Java Object wait() Method
The Object wait() method causes the current thread to enter the waiting state. Until another thread calls this object'snotify() methodornotifyAll() method。
The current thread must be the monitor owner of this object, otherwise anIllegalMonitorStateExceptionexception will be thrown.
If the current thread is interrupted by any thread before or while waiting, anInterruptedExceptionexception will be thrown.
Syntax
public final void wait()
Parameters
None 。
Return Value
No return value.
Example
The following example demonstrates the use of the wait() method:
Example
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class ExampleTest extends Object {
private List synchedList;
public ExampleTest() {
//Create a synchronized list
synchedList = Collections.synchronizedList(new LinkedList());
}
//Remove an element from the list
public String removeElement() throws InterruptedException {
synchronized (synchedList) {
//Wait if the list is empty
while (synchedList.isEmpty()) {
System.out.println("List is empty...");
synchedList.wait();
System.out.println("Waiting...");
}
String element = (String) synchedList.remove(0);
return element;
}
}
//Add an element to the list
public void addElement(String element) {
System.out.println("Opening...");
synchronized (synchedList) {
//Add an element and notify that the element exists
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() {
//Perform the add element operation and start the loop
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!
Other Extensions
Java Object Class