【发布时间】:2015-12-21 22:14:38
【问题描述】:
我有一个 ConcurrentHashMap,我从多个线程中填充,如下所示:
private static Map<ErrorData, Long> holder = new ConcurrentHashMap<ErrorData, Long>();
public static void addError(ErrorData error) {
if (holder.keySet().contains(error)) {
holder.put(error, holder.get(error) + 1);
} else {
holder.put(error, 1L);
}
}
上面的代码中是否存在竞争条件并且可以跳过更新?另外,如果可以提供更好的性能,我该如何在这里使用 Guava AtomicLongMap?
我使用的是 Java 7。
【问题讨论】:
标签: java multithreading guava concurrenthashmap