Я читал об ожидании и уведомлении на Java.
Поясню на небольшом примере:
@Override
public void run() {
synchronized (msg) {
try{
msg.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(name+" processed: "+msg.getMsg());
}
}
Здесь говорится, что когда мы делаем synchronized (msg)
. Текущий поток T1 будет блокировать объект msg.
Таким образом, блокировку можно снять двумя способами:
- После завершения синхронизированного блока
- когда wait () вызывается T1 ??
И если какой-то другой поток вызовет notify () и разбудит поток T1, T1 снова получит доступ для блокировки на msg
объекте?