【发布时间】:2014-02-12 07:31:03
【问题描述】:
我知道,我们使用这个习惯用法来等待通知来处理虚假唤醒:
synchronized (obj) {
while(somecond)
obj.wait();
}
如果出现虚假唤醒,我们将只检查状态并返回等待。
但是,考虑一下情况:
- 我们开始等待,obj.wait() 释放对 obj 的锁定。
- 等待线程被操作系统虚假通知
- 我们返回检查条件(由于等待释放了 obj 锁)
- obj.notify() 在那一刻被调用。
是的,条件检查非常快,我们可以进行条件检查而不是obj.wait() 的机会很小,可以忽略不计。在这种情况下,我们可以放弃obj.notify() 呼叫。
我是不是误解了什么,或者我们真的可以使用这种模式来放松通知?
【问题讨论】:
标签: java multithreading