1)Lock不是Java語言內建的,synchronized是Java語言的關鍵字,因此是內建特性。Lock是一個類,透過這個類可以實現同步訪問;
2)Lock和synchronized有一點非常大的不同,採用synchronized不需要使用者去手動釋放鎖,當synchronized方法或者synchronized程式碼塊執行完之後,系統會自動讓執行緒釋放對鎖的佔用;而Lock則必須要使用者去手動釋放鎖,如果沒有主動釋放鎖,就有可能導致出現死鎖現象。
區別: 1.用法不一樣。synchronized既可以加在方法上,也可以載入特定的程式碼塊上,括號中表示需要鎖的物件。而Lock需要顯示地指定起始位置和終止位置。synchronzied是託管給jvm執行的,Lock鎖定是透過程式碼實現的。 2.在效能上來說,如果競爭資源不激烈,兩者的效能是差不多的,而當競爭資源非常激烈時(即有大量執行緒同時競爭),此時Lock的效能要遠遠優於synchronized。所以說,在具體使用時要根據適當情況選擇。 3.鎖的機制不一樣。synchronized獲得鎖和釋放的方式都是在塊結構中,而且是自動釋放鎖。而Lock則需要開發人員手動去釋放,並且必須在finally塊中釋放,否則會引起死鎖問題的發生。 4.Lock是一個介面,而synchronized是Java中的關鍵字,synchronized是內建的語言實現; 5.synchronized在發生異常時,會自動釋放執行緒佔有的鎖,因此不會導致死鎖現象發生;而Lock在發生異常時,如果沒有主動透過unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖; 6.Lock可以讓等待鎖的執行緒響應中斷,而synchronized卻不行,使用synchronized時,等待的執行緒會一直等待下去,不能夠響應中斷;透過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。Lock可以提高多個執行緒進行讀操作的效率。
1)Lock不是Java語言內建的,synchronized是Java語言的關鍵字,因此是內建特性。Lock是一個類,透過這個類可以實現同步訪問;
2)Lock和synchronized有一點非常大的不同,採用synchronized不需要使用者去手動釋放鎖,當synchronized方法或者synchronized程式碼塊執行完之後,系統會自動讓執行緒釋放對鎖的佔用;而Lock則必須要使用者去手動釋放鎖,如果沒有主動釋放鎖,就有可能導致出現死鎖現象。
區別: 1.用法不一樣。synchronized既可以加在方法上,也可以載入特定的程式碼塊上,括號中表示需要鎖的物件。而Lock需要顯示地指定起始位置和終止位置。synchronzied是託管給jvm執行的,Lock鎖定是透過程式碼實現的。 2.在效能上來說,如果競爭資源不激烈,兩者的效能是差不多的,而當競爭資源非常激烈時(即有大量執行緒同時競爭),此時Lock的效能要遠遠優於synchronized。所以說,在具體使用時要根據適當情況選擇。 3.鎖的機制不一樣。synchronized獲得鎖和釋放的方式都是在塊結構中,而且是自動釋放鎖。而Lock則需要開發人員手動去釋放,並且必須在finally塊中釋放,否則會引起死鎖問題的發生。 4.Lock是一個介面,而synchronized是Java中的關鍵字,synchronized是內建的語言實現; 5.synchronized在發生異常時,會自動釋放執行緒佔有的鎖,因此不會導致死鎖現象發生;而Lock在發生異常時,如果沒有主動透過unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖; 6.Lock可以讓等待鎖的執行緒響應中斷,而synchronized卻不行,使用synchronized時,等待的執行緒會一直等待下去,不能夠響應中斷;透過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。Lock可以提高多個執行緒進行讀操作的效率。