Я новичок в многопоточности. В настоящее время я изучаю блокировку и уведомляю и синхронизирую блок. Я создал небольшую программу, чтобы проверить, как ждать и уведомлять работу с блоком синхронизации, если я не создам ни одного потока (я предполагаю, что основной поток получит блокировку). Ниже приведен код для лучшего понимания., когда поток освободит блокировку объекта?
public class Problem1
{
public void waitForSignal() throws InterruptedException
{
Object obj=new Object();
synchronized (obj) {
obj.wait();
obj.notify();
}
}
public static void main(String args[]) throws InterruptedException
{
Problem1 pb=new Problem1();
pb.waitForSignal();
System.out.println("hello");//controll not come here
}
}
Если я запустил вышеуказанную программу, она застрянет. и контроль не идет, чтобы уведомить(), и он не выйдет из блока синхронизации. почему код ведет себя так. я пытался искать в Google, и я нашел ниже заявление
ожидания() говорит вызывающий поток отказаться от монитора и пойти спать, пока другой поток не входит в тот же монитор и вызывает уведомить() ,
что я понимаю из вышеприведенного утверждения, что для правильного выполнения моей программы я должен создать другой поток, который войдет в тот же монитор и прервет выполнение текущего потока, удерживающего блокировку. Пожалуйста, сделайте меня правильным, если я ошибаюсь. Прошу меня исправить код выше, поэтому он будет работать нормально без Stuck.
Возможный дубликат [java, wait, notify notifyall] (http://stackoverflow.com/questions/5999193/java-wait-notify-notifyall) – hotzst