線程中的current thread not owner異常錯誤

多線程常用的一些方法: wait(),wait(long),notify(),notifyAll()等

這些方法是當前類的實例方法,

wait()      是使持有對象鎖的線程釋放鎖;
wait(long)是使持有對象鎖的線程釋放鎖時間爲long(毫秒)後,再次獲得鎖,wait()和wait(0)等價;
notify()    是喚醒一個正在等待該對象鎖的線程,如果等待的線程不止一個,那麼被喚醒的線程由jvm確定;
notifyAll  是喚醒所有正在等待該對象鎖的線程.

並且應該優先使用notifyAll()方法,因爲喚醒所有線程比喚醒一個線程更容易讓jvm找到最適合被喚醒的線程.

對於上述方法,只有在當前線程中才能使用,否則報運行時錯誤java.lang.IllegalMonitorStateException: current thread not owner.

從實現角度來分析:
在線程調用wait()方法時,需要把它放到一個同步段裏,即應該在調用前使用


否則將會出現"java.lang.IllegalMonitorStateException: current thread not owner"的異常。

 

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章