1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
這是因?yàn)槟銢](méi)有理解到wait()
,notify()
,notifyAll()
這三個(gè)方法的真正作用,它們不是控制的所有線(xiàn)程,而是所對(duì)象的線(xiàn)程。也就是說(shuō),XiaoMing 的同步鎖里調(diào)用的 wait() 方法阻塞的是 XiaoMing 這個(gè)線(xiàn)程;Clock 的同步鎖喚醒的是 Clock 類(lèi)的對(duì)象的線(xiàn)程,所以 XiaoMing 的對(duì)象的線(xiàn)程就一直阻塞下去了
可以修改 XiaoMing 類(lèi)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 的線(xiàn)程會(huì)因?yàn)?code>clk域被阻塞,直到Clock
的線(xiàn)程調(diào)用notifyAll()
添加回答
舉報(bào)