在synchronized语句中的wait(),notify()和notifyAll()

Min*_*ang 4 java synchronization

尝试notifyAll()在synchronized语句中执行调用时出现以下错误:在同步上下文外调用Object.notify().

例:

final List list = new ArrayList();
synchronized(list) {..... invoked notifyAll() here};
Run Code Online (Sandbox Code Playgroud)

Dan*_*ien 5

您只能在正在同步的对象上调用wait(),notify()notifyAll():

synchronized (list) {
    //...
    list.notifyAll();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,调用线程必须拥有对象的监视器.

如果,在内部synchronized (list),你打电话notifyAll(),你实际上是在呼唤notifyAll(),this而不是list.