volatile關鍵字我有下面的代碼:線程安全
public class Foo {
private volatile Map<String, String> map;
public Foo() {
refresh();
}
public void refresh() {
map = getData();
}
public boolean isPresent(String id) {
return map.containsKey(id);
}
public String getName(String id) {
return map.get(id);
}
private Map<String, String> getData() {
// logic
}
}
- 是上面的代碼線程安全的或者我需要添加或互斥在那裏?如果它不是線程安全的,請說明原因。
而且,我讀過,應該使用AtomicReference
,而不是這個,而是在AtomicReference
類的來源,我可以看到,用於保存值的字段是揮發性的(少數方便的方法沿)。
- 是否有具體原因使用
AtomicReference
代替?
我讀過與此有關的多個答案,但volatile的概念仍然讓我困惑。提前致謝。
你應該使用'ConcurrentHashMap'進行實例化。在這種情況下,volatile(或原子引用)在這裏是無用的。 – dehasi
它不是線程安全的,雖然對Map類的引用是不穩定的,但數據不是 – nafas
@nafas但我從不修改地圖對象本身。我一直在更新參考。 – GurV