Java: Освобождаются ли все мониторы, когда поток ожидает объекта?

Прежде чем поток сможет ожидать объекта, он должен получить монитор для этого объекта. Затем монитор освобождается, и поток пытается повторно захватить его после пробуждения.

Но что происходит с другими мониторами, которые поток удерживает, когда он вызывает wait ?

Рассмотрим следующий пример:

   Object a = // ...
   Object b = // ...

   synchronized(a)
   {
       synchronized(b)
       {
           b.wait();
           // continue
       }
   }

Когда поток вызывает b.wait () , снимает ли он блокировки на как a , так и b , или только b ?

19
задан Tony the Pony 7 June 2011 в 12:44
поделиться