下面的代碼有什麼問題?下面的代碼不是線程安全的嗎?
private Map<Integer, Integer> aMap = new ConcurrentHashMap<Integer, Integer>();
Record rec = records.get(id);
if (rec == null) {
rec = new Record(id);
records.put(id, rec);
}
return rec;
- 是上面的代碼不線程安全?爲什麼在這種情況下我應該使用
putIfAbsent
? - 鎖定僅適用於更新。在檢索的情況下,其 允許完全併發。這個說法是什麼意思?
只讀操作(即不修改結構的操作)可以由多個線程同時完成。 - 這是否意味着完全併發? –
我以前沒有聽說過這個詞,但在我看來,是的。 – Adam
用putIfAbsent()替換put的最後一個問題是否使線程安全? –