gpt4 book ai didi

Java wait notify - notify 通知所有线程

转载 作者:行者123 更新时间:2023-11-29 10:12:45 26 4
gpt4 key购买 nike

我有两个扩展线程的类和一个等待/通知

class A extends Thread {

int r = 20;

public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
notify();
}
}
}

class B extends Thread {

A a;

public B(A a) {
this.a = a;
}

public void run() {
synchronized (a) {
System.out.println("Starting...");
try {
a.wait();
} catch (InterruptedException e) {
}
System.out.println("Result is: " + a.r);
}
}
}

A类在执行结束时通知B类

A a = new A();
new B(a).start();
new B(a).start();
new B(a).start();

还有下面的代码

a.start();

通知所有线程

new Thread(a).start(); 

通知一个线程

为什么 a.start() 会通知所有线程?

最佳答案

不是

a.start();

通知所有线程。事实上,a 引用的线程终止通知所有在其监视器上等待的线程。

这在 javadoc 中有解释

As a thread terminates the this.notifyAll method is invoked. It is recommended that applications not use wait, notify, or notifyAll on Thread instances.

另一方面,在

new Thread(a).start(); 

您将 a 用作 Runnable,而不是 Thread。将调用 this.notifyAll 的实际线程是由实例创建表达式 new Thread(a) 创建的,没有其他线程调用过 Object#wait () 上。

关于Java wait notify - notify 通知所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com