下面的代码有什么问题?下面的代码不是线程安全的吗?
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的最后一个问题是否使线程安全? –