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();