有三个简单的线程。两个在运行中启动,第三个依次唤醒。
Main main = new Main(); // экземпляр, по которому вызываем методы и синхронизируемся
Thread thread1 = new Thread(() -> main.methodA());
Thread thread2 = new Thread(() -> main.methodA());
Thread thread3Notify = new Thread(() -> main.methodB());
这是一种方法,其唯一目的是让您入睡。
public synchronized void methodA() {
System.out.println("I enter methodA" + Thread.currentThread());
this.wait();
System.out.println("I am awake " + Thread.currentThread());
}
我想依次唤醒两个线程的方法。
public synchronized void methodB() {
this.notifyAll();
sleep(1000);
this.notifyAll();
}
但问题是:我在控制台中看到了这个
I enter methodAThread[Thread-0,5,main]
I enter methodAThread[Thread-1,5,main]
I am awake Thread[Thread-0,5,main]
那些。methodB 只唤醒第一个线程,第二个线程永远挂在 methodA 中。我调用 this.notifyAll() 多少次都没关系
我试图自己弄清楚,但我做不到。