Synchronized和Lock的區別

2021-08-07 14:01:41 字數 538 閱讀 6585

lock鎖一般通過使用reentrantlock(重入鎖)類進行使用,synchronized和lock鎖主要有以下幾點區別:

1、synchronized是在jvm層面上實現的,通過在方法上加synchronized關鍵字或者將synchronized加在物件上實現加鎖,解鎖由jvm自動實現,reentrantlock是在需要加鎖的**段之前使用lock()加鎖,在**段之後使用unlock()解鎖(一般將這個過程放在finally中保證執行完**段一定會釋放鎖),synchronized可能會造成死鎖,而reentrantlock不會造成死鎖。

2、reentrantlock在synchronized的原有功能上新增了鎖中斷、鎖投票、定時鎖等候等功能。即使用synchronized的執行緒如果一直獲取不到鎖則會一直等待,而reentrantlock則會在等待一定時間後中斷等待,去執行別的任務。

3、synchronized使用的是悲觀鎖,對鎖實行獨佔;而reentrantlock使用的是樂觀鎖,在對資料進行提交是如果發現原有資料發生了修改則會重試直到成功。

lockInterruptibly和lock的區別

size medium lock 拿不到lock就不罷休,不然執行緒就一直block。lockinterruptibly會優先響應執行緒中斷,處理響應的方式是丟擲interruptedexception。size 可以從原始碼看出來的 private void doacquireinterrupti...

synchronized和volatile的區別?

一旦乙個共享變數 類的成員變數 類的靜態成員變數 被volatile修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是 立即可見的。2 禁止進行指令重排序。volatile本質是在告訴jvm當前變數在暫存器 工作...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...