1 & gt;當當前線程不包含當前對象的鎖資源時,調用obj.wait()方法;
2 & gt當當前線程不包含當前對象的鎖資源時,調用obj.notify()方法。
3 & gt當當前線程不包含當前對象的鎖資源時,調用obj.notifyAll()方法。
現在看看妳的代碼。Hmaker類中的make方法使用同步代碼塊。添加您刪除的代碼塊synchronized(Ham.box){},運行的結果是:
廚師A:漢堡來了(壹共五個)。
線程“a”中的異常Java . lang . illegalmonitorstateexception
at java.lang.Object.notify(本機方法)
at test . thread . h maker . make(h maker . Java:7)
at test . thread . h maker . run(h maker . Java:21)
這是因為妳沒有鎖定這個代碼塊,當前線程不包含Ham.box對象的鎖資源,所以在調用Ham.box.notify()方法時拋出這個異常。
同理,妳給出的運行結果是,妳沒有在Hassistant類的sell方法中添加同步代碼塊。具體變化如下:
公共void sell()
{
if(火腿產量== 0)
{
System.out.println("店員:顧客朋友們,請稍等,漢堡沒了!!");
}
同步(火腿盒){
試試{ ham . box . wait();}
catch(interrupted exception e){ e . printstacktrace();}
ham . sales++;
System.out.println("店員:顧客您好,漢堡來了,(總* * *售出量:"+ham . sales+");
}
}
只需鎖定Ham.box對象。這個異常其實很容易解決。他拋出的情況只有三種。
希望能給妳壹些幫助,謝謝。