Java 多線程 鎖釋放問題


Java多線程運行環境中,在哪些情況下會使對象鎖釋放?

答:由於等待一個鎖的線程只有在獲得這把鎖之后,才能恢復運行,所以讓持有鎖的線程在不再需要鎖的時候及時釋放鎖是很重要的。在以下情況下,持有鎖的線程會釋放鎖:
(1)執行完同步代碼塊,就會釋放鎖。(synchronized)
(2)在執行同步代碼塊的過程中,遇到異常而導致線程終止,鎖也會被釋放。(exception)
(3)在執行同步代碼塊的過程中,執行了鎖所屬對象的wait()方法,這個線程會釋放鎖,進
        入對象的等待池。(wait)

除了以上情況以外,只要持有鎖的線程還沒有執行完同步代碼塊,就不會釋放鎖。
在下面情況下,線程是不會釋放鎖的:
(1)執行同步代碼塊的過程中,執行了Thread.sleep()方法,當前線程放棄CPU,開始睡眠,進入堵塞狀態,在睡眠中不會釋放鎖。
(2)在執行同步代碼塊的過程中,執行了Thread.yield()方法,當前線程放棄CPU,回到就緒狀態,但不會釋放鎖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM