從實現角度來講: 性能
sychronied 關鍵字是JVM層實現的,由其提供內置的鎖。而lock方式必須被顯示的建立 spa
從代碼角度來講 線程
lock方式,代碼缺少優雅性。sychronized代碼更加簡潔,代碼量少。 對象
從使用角度來講 事務
lock方式更加靈活,可是隻有在解決特殊問題的時候纔會使用。 資源
用sychronized關鍵字不能嘗試着獲取鎖且最終獲取鎖會失敗,或者嘗試着獲取鎖一段時間,而後放棄它,要實現這些必須使用lock方式。 異常
使用sychronized關鍵字時,若是某些事務失敗了,那麼就會拋出異常,由JVM自動釋放線程資源,可是你沒法也沒有機會去作任何的清理工做,以維護系統使其處於良好的狀態。使用顯示的Lock方式,你就能夠使用finally子句將系統維護在正確的狀態了。 時間
顯示的Lock對象在加鎖和釋放鎖方面,相對於內建的sychronized鎖來講,還賦予了你耕細粒度的控制力。 ant
從性能角度來講: 工作
在資源競爭不是很激烈的狀況下,Synchronized的性能要優於ReetrantLock,可是在資源競爭很激烈的狀況下,Synchronized的性能會降低幾十倍,可是ReetrantLock的性能能維持常態