等待和通知

2019-08-29  本文已影响0人  希希里之海

等待和通知

API

java.lang.Object 类提供了一套等待/通知的 API,它由 3 个 wait()、一个 notify() 和一个 notifyAll() 方法组成。wait() 方法等待某个条件成立,当这个条件成立时,notify() 和 notifyAll() 方法通知处于等待中的线程。

注意:

为什么 wait 方法定义在 Object 类里面,而不是 Thread 类?
为什么 wait 方法要放到同步块中?

为了避免使用者出现 "Lost-Wake-Up" 问题。

关于什么是 "Lost-Wait-Up" 问题,可以参考狼叔的博客:

https://www.jianshu.com/p/b8073a6ce1c0

总结如下

如下述代码,加锁的是 obj 对象,notify 却是 anotherObj 对象使用,会抛出 IllegalMonitorStateException 异常。

private Object obj = new Object();

private Object anotherObj = new Object();

@Test
public void produce() {
    synchronized (obj) {
        try {
            anotherObj.notify();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读