Synchronized 和 lock 的區別

2022-09-05 08:18:12 字數 356 閱讀 9567

synchronized

1:jvm 層面實現,如果拋異常的話,jvm會自動釋放掉鎖

2:只有乙個條件變數,鎖物件的wait 和 notify

3:可以被效能監視工具監視到

4:如果在方法上新增syn那麼,鎖物件就是該物件,共享該物件的執行緒就會互斥

lock

1:更加物件導向

2:**層面實現

3:可以產生多個條件變數

4:可以嘗試非阻塞的獲取鎖,能中斷的獲取鎖,能超時獲取鎖

lock能完成所有synchronized的功能,並且更加物件導向,能提供更精確的定義,更好的效能

synchronized 會自動釋放鎖,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...