這兩天學習生產者消費者模型的時候,使用Java線程來實現,出現了一個問題“Exception in thread "消費者" java.lang.IllegalMonitorStateException”,并且,線程不結束。報錯圖片如下:
那我們怎么解決呢?
? ? ? ? 1.我們先從字面意思了解下,“IllegalMonitorStateException”這里說的是“非法的監視器狀態異常”,也就是說,我們的Java鎖監視器狀態出現了異常。
????????2.于是我們根據錯誤的最下面的一行,定位到我們的錯誤代碼位置,在代碼的第25行,下面是我的源碼:
也就是我們調用wait()方法時出現的錯誤。仔細看看自己的代碼,我發現一個問題,我沒有在同步代碼塊中使用wait(),因為我根本不是同步代碼,所以直接使用鎖監視器,那就會直接出現錯誤。從上面的灰色代碼也能看到一些端倪。
3.解決辦法:將上面灰色代碼的同步塊注釋釋放掉即可(如果你沒寫的話,最好根據你的代碼上相應的同步代碼),釋放掉后的代碼如下:
4.最后的執行結果如下:?