我在循环读取hashmap里的内容时,在循环中又在另外一个线程对hashmap进行修改,于是出现了如下这个异常
java.util.ConcurrentModificationException
翻译过来就是并发修改异常,上网找了下资料,解决方法如下:
while(keys.hasNext()) {
Integer i = keys.next();
i f(!gradesIds.contains(i)) {
keys.remove();
gradeMap.remove(i);
}
}
我加入这段代码之后,还是会出现该异常,于是继续寻找原因,发现了这样两段话:
可以简单的把ConcurrentHashMap理解为多个HashMap组合,锁不是在ConcurrentHashMap上,而是在某个HashMap上。
注意:ConcurrentHashMap和HashMap的一个不同点就是ConcurrentHashMap里不能存放key和value为空的值。
于是我将Hashmap改为ConcurrentHashMap,经调试,解决了该问题。
java.util.ConcurrentModificationException
翻译过来就是并发修改异常,上网找了下资料,解决方法如下:
调用HashMap的reomve方法时会出现 java.util.ConcurrentModificationException 。解决方法就是先用Iterator的方法remove,然后再调用HashMap的remove方法。即代码如下:
while(keys.hasNext()) {
Integer i = keys.next();
i f(!gradesIds.contains(i)) {
keys.remove();
gradeMap.remove(i);
}
}
我加入这段代码之后,还是会出现该异常,于是继续寻找原因,发现了这样两段话:
1.如果你的程序是高并发,并且你的map是经常修改的,千万不要用HashMap,会把这个线常卡死的,要用ConcurrentHashMap
可以简单的把ConcurrentHashMap理解为多个HashMap组合,锁不是在ConcurrentHashMap上,而是在某个HashMap上。
注意:ConcurrentHashMap和HashMap的一个不同点就是ConcurrentHashMap里不能存放key和value为空的值。
于是我将Hashmap改为ConcurrentHashMap,经调试,解决了该问题。