У меня создалось впечатление, что wait() освобождает все блокировки, но я нашел это сообщение, в котором говорится
"Вызов ожидания внутри синхронизированного метода - это простой способ получить внутреннюю блокировку"
Прошу пояснить, я немного смущен.
http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html