在學習java多線程這一塊知識的時候,遇到了不少個關於線程鎖何時釋放的問題,現總結幾種釋放鎖和不釋放鎖的操做以下:
不釋放鎖:java
- 線程執行同步代碼塊或同步方法時,程序調用Thread.sleep(Long l)、Thread.yield()方法暫停當前線程的執行
- 線程執行同步代碼塊時,其它線程調用該線程suspend()方法將該線程掛起,該線程不會釋放鎖(同步監視器)
- 儘可能避免使用suspend()和resume()來控制線程
釋放鎖:多線程
- 當前線程的同步方法、同步代碼塊執行結束
- 當前線程的同步方法、同步代碼塊遇到break、return終止該代碼塊、該方法的繼續執行
- 當前線程的同步方法、同步代碼塊中出現了未處理Error和Exception,致使異常結束
- 當前線程在同步方法、同步代碼塊中執行了線程對象的wait()方法,當前線程暫停,並釋放鎖