Метод Java Object wait(long timeout)
Класс Object в Java
Метод wait(long timeout) класса Object заставляет текущий поток находиться в состоянии ожидания (блокировки) до тех пор, пока другой поток не вызовет методnotify() этого объектаилиметод notifyAll()или до тех пор, пока не истечёт период тайм-аута, установленный параметром timeout.
Если параметр timeout равен 0, тайм-аута не будет, и ожидание будет продолжаться, подобнометоду wait()。
Текущий поток должен быть владельцем монитора этого объекта; в противном случае всё равно будет выброшеноIllegalMonitorStateExceptionисключение.
Если текущий поток будет прерван любым потоком до или во время ожидания, он выброситInterruptedExceptionисключение.
Если переданный параметр недопустим, будет выброшеноIllegalArgumentExceptionисключение.
Синтаксис
public final void wait(long timeout)
Parameters
Возвращаемое значение
Нет возвращаемого значения.
Пример
В следующем примере демонстрируется использование метода wait(long timeout):
Пример
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("Список пуст...");
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("Новый элемент:'" + element + "'");
synchedList.notifyAll();
System.out.println("notifyAll вызван!");
}
System.out.println("Закрытие...");
}
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("Исключение прерывания!");
} catch (Exception x) {
System.out.println("Исключение выброшено.");
}
}
};
Runnable runB = new Runnable() {
public void run() {
demo.addElement("Привет!");
}
};
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) {
}
}
}
Вывод вышеприведённой программы:
List is empty...
List is empty...
Opening...
New Element:'Hello!'
notifyAll called!
Closing...
Waiting...
Waiting...
List is empty...
Hello!
Interrupted Exception!
Класс Object в Java
Другие расширения