1. synchronized 是jvm 層次的(可以會造成死鎖), lock 可以寫代碼控制,一般在異常時在 finally 裡可以 unlock 釋放鎖
2. lock 細度更細,synchronized 一個線程鎖住了,其他線程無法進入。而 lock 裡的 ReadWriteLock 可以獲得 讀鎖 和寫鎖。可以允許多個寫鎖進入,
寫鎖和寫鎖不互斥,寫鎖和(寫鎖或者讀鎖)互斥
3. lock 可以用 trylock 試著獲得 鎖 ,如果獲得返回true,接著執行,否則可以去執行其他事情,而 synchronized 則一直等待,同時tryLock 還可以設置
在某個時間段內獲得鎖
if(lock.tryLock()){
// 獲得鎖 ,繼續執行
} else {
// 沒獲得鎖 ,干其他事情
}
4. lock 可以new 一個 condition ,condition 相當於 wait 和 notify 的作用