- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个静态 hashMap,与多个线程共享。我根本没有迭代 map ,只是使用了 get
、put
、remove
。 ConcurrentModificationException
安全吗?
方法是这样的
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
上执行get
、put
和remove
操作,但没有适当的同步,一些不好的事情,例如 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/
我是一名优秀的程序员,十分优秀!