我想在映射初始化時只創建一次鎖定。這是我使用的代碼。這是使靜態方法使單體地圖線程安全的正確和有效的方法
public static Map<String, String> getOrderStatusInstance() {
if (orderStatusMap == null) {
synchronized (Utility.class) {
orderStatusMap = new HashMap<String, String>();
orderStatusMap.put("Key1", "Value1");
orderStatusMap.put("Key2", "Value2");
orderStatusMap.put("Key3", "Value3");
orderStatusMap.put("Key4", "Value4");
}
}
return orderStatusMap;
}
使用靜態初始值設定項。 – birryree
你可以使用'HashTable',它已經是一個線程安全的容器。沒有理由做額外的工作。 –
不,這不是因爲在設置「orderStatusMap」變量之後不知道其他線程在填充之前可能會使用它。此外,兩個線程可能會先通過檢查「if(orderStatusMap == null){...」之前的值將被分配。 – Dmitry