Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)
2020-12-13 02:48
阅读:261
所以,我们可以总结到,为了避免出现这种lost wake up问题,在这种模型之下,总应该将我们的代码放进去的同步块中。
Java强制我们的wait()/notify()调用必须要在一个同步块中,就是不想让我们在不经意间出现这种lost wake up问题。
不仅仅是这两个方法,包括java.util.concurrent.locks.Condition的await()/signal()也必须要在同步块中:
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
@Test
public void test() {
try {
condition.signal();
} catch (Exception e) {
e.printStackTrace();
}
}
确的来说,即便是我们自己在实现自己的锁机制的时候,也应该要确保类似于wait()和notify()这种调用,要在同步块内,防止使用者出现lost wake up问题。
Java的这种检测是很严格的。它要求的是,一定要处于锁对象的同步块中。举例来说:
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)
文章链接:http://soscw.com/essay/26338.html
文章标题:Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)
文章链接:http://soscw.com/essay/26338.html
评论
亲,登录后才可以留言!