gpt4 book ai didi

java - 可以获取、放置和删除 HashMap 中的元素而无需迭代导致 ConcurrentModificationException?

转载 作者:行者123 更新时间:2023-12-04 20:41:03 25 4
gpt4 key购买 nike

我有一个静态 hashMap,与多个线程共享。我根本没有迭代 map ,只是使用了 getputremoveConcurrentModificationException 安全吗?

方法是这样的

private static Map<Long, Integer> TRACKER = new HashMap<Long,Integer>();
public static void track(Long tid, boolean b) {
if (b) {
if (TRACKER.containsKey(tid)) {
TRACKER.put(tid, TRACKER.get(tid) + 1);
} else {
TRACKER.put(tid, 1);
}
} else {
Integer n = TRACKER.get(tid);
if (n != null) {
n = n -1;
if (n == 0) {
TRACKER.remove(tid);
} else {
TRACKER.put(tid, n);
}
}
}
}

最佳答案

如果多个线程在HashMap 上执行getputremove 操作,但没有适当的同步,一些不好的事情,例如 size() 报告丢失/丢失的条目,意外的 NPE ......甚至可能发生无限循环。

HashMap documentation说——

Note that this implementation is not synchronized. If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more mappings; merely changing the value associated with a key that an instance already contains is not a structural modification.) ...

谢谢斯蒂芬。

关于java - 可以获取、放置和删除 HashMap 中的元素而无需迭代导致 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com