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