在java中,跟着synchronized關鍵字的lock都會在thread離開同步塊的範圍時被釋放掉,即便是由於異常而離開範圍也是同樣。因此在java中使用synchronized關鍵字時,異常致使不釋放鎖而致使死鎖的現象決不會發生。java
Lock interace代替synchronized關鍵字,java是不可能會知道此明確lock的範圍,若是遇到異常,此lock持有的鎖不會自動釋放,容易致使死鎖現象。有一個簡單的方法能夠解決這個問題:咱們能夠用java的finally子句來確保lock會在完成時釋放掉,而無論method是怎麼離開的。spa