Synchronized
1:jvm 層面實現,如果拋異常的話,jvm會自動釋放掉鎖
2:只有一個條件變量,鎖對象的wait 和 notify
3:可以被性能監視工具監視到
4:如果在方法上添加syn那么,鎖對象就是該對象,共享該對象的線程就會互斥
Lock
1:更加面向對象
2:代碼層面實現
3:可以產生多個條件變量
4:可以嘗試非阻塞的獲取鎖,能中斷的獲取鎖,能超時獲取鎖
Lock能完成所有synchronized的功能,並且更加面向對象,能提供更精確的定義,更好的性能
synchronized 會自動釋放鎖,lock需要手動釋放鎖.
