То, что вы заблокировали замок, не означает, что у вас есть монитор для указанного объекта.Вы должны использовать synchronized
, чтобы взять монитор для объекта.Что-то вроде:
try
{
synchronized(m)
{
m.wait();
}
}
catch(InterruptedException e)
{
}
lock()
для блокировки означает, что вы получаете блокировку, если она доступна.Если блокировка недоступна, поток будет блокироваться до тех пор, пока блокировка не будет снята другим потоком.
synchronized
на объекте означает получение монитора для указанного объекта.Если монитор недоступен, поток будет блокироваться до тех пор, пока монитор не будет освобожден другим потоком, и текущий поток не будет notify()
настроен на пробуждение.