鎖在什麼時候釋放?

2014/9/4


鎖在什麼時候釋放?




分爲兩種情況:

一。在該線程的同步方法,同步代碼塊中。

1.該線程的同步方法、同步代碼塊執行完。

2.該線程同步方法、同步代碼塊中遇到return,break.

3.該線程同步方法、同步代碼塊中發生了未處理的Exception、Error

二、在其他線程中。

4.其他線程執行了同步監聽器對象的wait().

5.其他線程執行了當前線程的stop.



在以下情況中,線程不會釋放鎖。(在當前線程的同步代碼中)

1.在該線程的同步方法,同步代碼塊中thread.sleep(),thread.yield().

2.其他線程調用了該線程的suspend()方法。


便於記憶:

在當前線程的同步代碼塊中

線程停止(線程停止只有run()方法結束,而run()方法結束,包含下述述情況)。(stop方法失效)

會引起鎖釋放的條件:

1.同步方法、同步代碼塊執行完。

2.同步方法、同步代碼塊中遇到return,break.

3.同步方法、同步代碼塊中發生了未處理的Exception、Error

4.同步方法、同步代碼塊中,wait();

不會引起鎖釋放:

1.Thread.sleep();

2.Thread.yield();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章