如果我有一个哈希表和这个方法:
private Map<String, String> m = new HashMap<>();
private void add(String key, String value) {
String val = m.get(key);
if (val == null) {
m.put(key, value);
}
}
如果我有两个线程A和B调用相同的键和值的方法,A和B都可能看到该键不在映射中,因此可能同时写入映射。但是,写入顺序(A在B之前还是B在A之前)不应影响结果,因为它们都写入相同的值。但我想知道并发写是否会危险,并且可能导致意外的结果。在这种情况下,我应该使用ConcurrentHashMap。
add()
方法需要同步,而且m
必须是final
或者volatile
。使用ConcurrentHashMap
并不能解决这些问题。 - undefinedfinal
并且将add()
方法同步,它会起作用的。然而,在重负载(多线程)下,ConcurrentHashMap
可能提供更好的性能。 - undefined