尝试在同步语句内调用notifyAll()
时出现以下错误:在同步上下文外部调用Object.notify()。
例子:
final List list = new ArrayList();
synchronized(list) {..... invoked notifyAll() here};
最佳答案
您只能在正在其上同步的对象上调用wait()
,notify()
和notifyAll()
:
synchronized (list) {
//...
list.notifyAll();
}
换句话说,调用线程必须拥有对象的监视器。
如果在
synchronized (list)
中调用notifyAll()
,则实际上是在notifyAll()
而不是this
上调用list
。关于java - 同步语句中的wait(),notify()和notifyAll(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7504475/