1 回答

TA贡献1784条经验 获得超2个赞
这是因为你没有理解到wait()
,notify()
,notifyAll()
这三个方法的真正作用,它们不是控制的所有线程,而是所对象的线程。也就是说,XiaoMing 的同步锁里调用的 wait() 方法阻塞的是 XiaoMing 这个线程;Clock 的同步锁唤醒的是 Clock 类的对象的线程,所以 XiaoMing 的对象的线程就一直阻塞下去了
可以修改 XiaoMing 类run()
方法的同步锁
@Override
public void run() {
while(true) {
if (clk.isAlarm) {
System.out.println("Woshixiaoming!");
clk.isAlarm = false;
synchronized (this.clk) {
try {
this.clk.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
else{
if(clk.shutdown) break;
}
}
}
这样 XiaoMing 的线程会因为clk
域被阻塞,直到Clock
的线程调用notifyAll()
添加回答
举报