Java Object wait() 方法

Java Object 类


Object wait() 方法让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法notifyAll() 方法

当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。

如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。

语法

public final void wait()

参数

返回值

没有返回值。

实例

以下实例演示了 wait() 方法的使用:

实例

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class RunoobTest extends Object {

private List synchedList;

public RunoobTest() {
// 创建一个同步列表
synchedList = Collections.synchronizedList(new LinkedList());
}

// 删除列表中的元素
public String removeElement() throws InterruptedException {
synchronized (synchedList) {

// 列表为空就等待
while (synchedList.isEmpty()) {
System.out.println(List is empty…);
synchedList.wait();
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 RunoobTest demo = new RunoobTest();

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, Runoob);
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!

Java Object 类

本文来源于互联网:Java Object wait() 方法