synchronized和lock的區別

2021-09-26 02:31:49 字數 334 閱讀 7669

1.synchronized是關鍵字,屬於jvm層面;monitorenter(底層是通過monitor物件來完成,wait/notify也依賴於monitor物件只有在同步塊和方法中才能呼叫wait/notify等方法) monitorexit(包括正常退出和異常退出兩種);

而lock是乙個類,屬於api層面

2.synchronized執行完同步**,自動釋放鎖;lock鎖必須在finally中主動釋放鎖,不然容易造成死鎖

3.第一種無法判斷鎖的狀態;第二種可以判斷鎖的狀態

4.鎖型別區分:可重入,不可中斷,非公平;  可重入,可判斷,可公平

5.效能:少量同步;大量同步

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...