我有两个扩展Thread的类和一个wait / notify
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()会通知所有线程?
答案 0 :(得分:8)
不是
a.start();
通知所有线程。事实是a
引用的线程终止通知在其监视器上等待的所有线程。
当线程终止时,将调用
this.notifyAll
方法。 建议应用程序不要在wait
个实例上使用notify
,notifyAll
或Thread
。
另一方面,在
new Thread(a).start();
您将a
用作Runnable
,而不是Thread
。将调用this.notifyAll
的实际线程是由实例创建表达式new Thread(a)
创建的线程,没有其他线程调用Object#wait()
。