1. 程式人生 > >Java多執行緒鎖釋放

Java多執行緒鎖釋放

Java多執行緒執行環境中,在哪些情況下會使物件鎖釋放?

由於等待一個鎖的執行緒只有在獲得這把鎖之後,才能恢復執行,所以讓持有鎖的執行緒在不再需要鎖的時候及時釋放鎖是很重要的。在以下情況下,持有鎖的執行緒會釋放鎖

(1)執行完同步程式碼塊,就會釋放鎖。(synchronized)
(2)在執行同步程式碼塊的過程中,遇到異常而導致執行緒終止,鎖也會被釋放。(exception)
(3)在執行同步程式碼塊的過程中,執行了鎖所屬物件的wait()方法,這個執行緒會釋放鎖,進
入物件的等待池。(wait)
除了以上情況以外,只要持有鎖的執行緒還沒有執行完同步程式碼塊,就不會釋放鎖。
在下面情況下,執行緒是不會釋放鎖的

(1)執行同步程式碼塊的過程中,執行了Thread.sleep()方法,當前執行緒放棄CPU,開始睡眠,在睡眠中不會釋放鎖。
(2)在執行同步程式碼塊的過程中,執行了Thread.yield()方法,當前執行緒放棄CPU,但不會釋放鎖。
(3)在執行同步程式碼塊的過程中,其他執行緒執行了當前執行緒物件的suspend()方法,當前執行緒被暫停,但不會釋放鎖