Вы можете вызывать wait()
, notify()
и notifyAll()
только для синхронизируемого объекта:
synchronized (list) {
//...
list.notifyAll();
}
Другими словами, вызывающий поток должен владеть монитором объекта.
Если внутри synchronized (list)
вы звоните notifyAll()
, вы на самом деле звоните notifyAll()
на this
вместо list
.