首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 靜態對象與非靜態對象在執行緒鎖定中的差異與死鎖成因

     編輯:程式設計綜合問答

Java 中靜態物件(static Object)屬於類別層級,所有執行緒共享同一個鎖定對象;非靜態物件則屬於實例層級,每個物件執行個體有自己的鎖定對象。當兩個執行緒分別鎖定 o1 與 o2,並嘗試互相鎖定對方持有的物件時,就會發生死鎖。

若 o1 與 o2 為靜態變數,所有執行緒競爭的是同一組鎖定,容易造成交叉鎖定;若為非靜態,每個執行緒持有不同實例的鎖定,就不會互相阻塞。因此在設計多執行緒程式時,務必釐清鎖定對象的範圍,避免巢狀鎖定順序不一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved