一、底層構成
synchronized是jvm的關鍵字,由monitorenter和monitorexit組成,由於wait和notify也依賴於monitorenter和monitorexit,所以 wait和notify必須在synchronized 裡面使用
lock是jdk提供的juc包下的類,是api層面上的。
二、使用方式
synchronized不需要手動釋放
lock必須手動釋放
三、是否可中斷
synchronized不可中斷
lock可以中斷
四、是否公平
synchronized是非公平
lock是預設非公平,但是可以是公平鎖
五、繫結多個condition
synchronized無法繫結多個condition,無法精確喚醒
lock可以
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...