Java 中靜態物件(static Object)屬於類別層級,所有執行緒共享同一個鎖定對象;非靜態物件則屬於實例層級,每個物件執行個體有自己的鎖定對象。當兩個執行緒分別鎖定 o1 與 o2,並嘗試互相鎖定對方持有的物件時,就會發生死鎖。
若 o1 與 o2 為靜態變數,所有執行緒競爭的是同一組鎖定,容易造成交叉鎖定;若為非靜態,每個執行緒持有不同實例的鎖定,就不會互相阻塞。因此在設計多執行緒程式時,務必釐清鎖定對象的範圍,避免巢狀鎖定順序不一致。
需求 範圍:1 ~ 360(含)。 可選小數部分:最多 2
錯誤代碼片段 function process() {
問題現象 `CheckBoxPreference` 標題過長
業務場景 表 tableA 有欄位 bid 關聯 table