Прежде чем поток может wait
на объект, он должен получить монитор на этом объекте. Затем монитор отпускается, и поток пытается повторно получить его после его пробуждения.
Но что происходит с другими мониторами, когда поток выполняется, когда он вызывает wait
?
Рассмотрим следующий пример:
Object a = // ... Object b = // ... synchronized(a) { synchronized(b) { b.wait(); // continue } }
Когда поток вызывает b.wait()
, он отпустит блокировки как на a
, так и на b
или только b
?