當前位置:編程學習大全網 - 源碼下載 - 如何處理下面的程序才能正常運行Java . lang . illegalmonitorstateexception?

如何處理下面的程序才能正常運行Java . lang . illegalmonitorstateexception?

首先,妳需要明白為什麽會拋出這個異常。此異常將在三種情況下引發:

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對象。這個異常其實很容易解決。他拋出的情況只有三種。

希望能給妳壹些幫助,謝謝。

  • 上一篇:wp出現 Error 404 - Not Found怎麽辦
  • 下一篇:維護接口源代碼
  • copyright 2024編程學習大全網