1. 程式人生 > >java中,synchronized釋放鎖的時機

java中,synchronized釋放鎖的時機

任何執行緒進入同步程式碼塊、同步方法之前,必須獲得同步監視器的鎖定,那麼何時會釋放這個鎖定呢?在程式中,是無法顯式釋放對同步監視器的鎖的,而會在如下幾個情況下釋放鎖。

1、當前執行緒的同步方法、程式碼塊執行結束的時候釋放

2、當前執行緒在同步方法、同步程式碼塊中遇到break 、 return 終於該程式碼塊或者方法的時候釋放。

3、。。。。出現未處理的error或者exception導致異常結束的時候釋放

4、。。。。程式執行了 同步物件 wait 方法 ,當前執行緒暫停,釋放鎖

==============================================================如下情況不會釋放鎖=====================================

1、。。。。。。程式呼叫 Thread.sleep()  Thread.yield() 這些方法暫停執行緒的執行,不會釋放。

2、執行緒執行同步程式碼塊時,其他執行緒呼叫 suspend 方法將該執行緒掛起,該執行緒不會釋放鎖 ,所以我們應該避免使用 suspend 和 resume 來控制執行緒