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