Я внимательно изучил документацию Oracle и не смог найти решение для шаблона решения для моей проблемы. У меня есть два анонимных потока, и нужно уведомить другого.Сообщить о неполадках, запущенных в разных объектах
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.a();
obj.b();
}
MyClass имеет две разные функции, каждая из которых запускает анонимную нить. B человек ожидает, что будить его жена, А.
public class MyClass{
public MyClass(){
}
public void a() {
new Thread(new Runnable(){
@Override
public synchronized void run() {
System.out.println("A: I am going to sleep");
try {
Thread.sleep(1000);
System.out.println("A: I slept one full day. Feels great.");
System.out.println("A: Hey B, wake up!");
notifyAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
public void b() {
new Thread(new Runnable(){
@Override
public synchronized void run() {
System.out.println("B: I am going to sleep. A, please wake me up.");
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("B: Thank you A for waking me up!");
}
}).start();
}
}
К сожалению, B спит навсегда и не может быть разбудили его жена, А.
Выход программы:
A: I am going to sleep
B: I am going to sleep. A, please wake me up.
A: I slept one full day. Feels great.
A: Hey B, wake up!
Я понимаю, что A и B работают в двух разных анонимных объектах нитей, поэтому A может уведомлять только о другом A (нет другой жены в постели, поэтому функция уведомления здесь бесполезна).
Каков правильный шаблон дизайна для этой проблемы?
Да ладно, не можете ли вы позволить другим людям выполнять домашнее задание? Как они узнают, если вы напишите для них рабочий код. – Kayaman
@ Kayaman Я бы не отправил ответ, если бы у OP был нулевой код. ОП попробовал что-то, поэтому я опубликовал возможный ответ. Наверное, так работает SO? – sanbhat
@sanbhat Почему у нас есть notifyAll() в b? – poiuytrez