如果線程的wait比notify先執(zhí)行,那么程序就死了,怎么才能解決這個(gè)問題?
public class AaaTest {
public static void main(String[] args) throws InterruptedException {
Object obj=new Object();
Ttt ttt=new Ttt(obj);
ttt.start();
synchronized(obj){
obj.wait();
}
System.out.println("wait先執(zhí)行,程序通過");
}
static class Ttt extends Thread{
Object obj;
Ttt(Object obj){
this.obj=obj;
}
public void run() {
synchronized(obj){
obj.notify();
}
}
}
}
這樣是否能夠100%保證 obj.wait(); 在 obj.notify(); 之前執(zhí)行?
2 回答

守著星空守著你
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)然不能!
因?yàn)槟膫€(gè)線程先進(jìn)入同步塊是不確定的。
main方法可以這樣改:
synchronized(obj) {
ttt.start();
obj.wait();
}
這樣可以保證ttt線程即使先于obj.wait()方法執(zhí)行,也無法進(jìn)入同步塊。

慕容708150
TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
不能,主線程還是ttt線程,那個(gè)先進(jìn)入同步塊synchronized(obj){}
無法保證,樓上正解
添加回答
舉報(bào)
0/150
提交
取消