Java中物件鎖和類鎖的區別


在多執行緒環境中,兩個或多個執行緒可以同時訪問共享資源,這可能導致系統行為不一致。Java使用鎖的概念來限制對共享資源或物件的併發訪問。鎖可以在兩個級別上應用:

  • 物件級鎖 - 當您希望僅允許一個執行緒訪問非靜態方法或程式碼的非靜態塊時,可以使用它。
  • 類級鎖 - 當我們想要防止 多個執行緒在執行時進入任何可用例項的同步塊時可以使用它。它應該始終用於使靜態資料執行緒安全。 
序號
關鍵點
物件級鎖
類級鎖

1

基本

當您希望僅允許一個執行緒訪問非靜態方法或程式碼的非靜態塊時,可以使用它

當我們想要防止多個執行緒在執行時進入任何可用例項的同步塊時可以使用它

2

靜態/非靜態

它應該始終用於使非靜態資料執行緒安全。

它應該始終用於使靜態資料執行緒安全。


3

鎖的數量

類的每個物件可能都有自己的鎖

可能存在多個類的物件,但始終只有一個類的類物件鎖可用

類級鎖示例

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //DO your stuff here
      }
   }
}

物件級鎖示例

public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //DO your stuff here
      }
   }
}

更新於:2020年1月21日

6000+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告