尝试在同步语句内调用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/

10-10 12:39