我无法弄清楚为什么我在我的"清除循环"上获得了ConcurrentModificationException。
private HashMap<String, Long> firsthits = new HashMap<String, Long>();
public void addHit(String name) {
firsthits.put(name, System.currentTimeMillis());
if (firsthits.size() > 5) {
for(Iterator<Map.Entry<String, Long>> it = firsthits.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<String, Long> s = it.next();
if ( (s.getValue() + 15000) < System.currentTimeMillis() ) {
firsthits.remove(s.getKey());
}
}
}
}
我还尝试了很多其他循环。这是100%同步运行,没有其他线程触及firsthits。
错误指向第14行,即if(firsthits.size()&gt; 5){
以下是例外:
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:839) ~[?:1.7.0_67]
at java.util.HashMap$EntryIterator.next(HashMap.java:880) ~[?:1.7.0_67]
at java.util.HashMap$EntryIterator.next(HashMap.java:878) ~[?:1.7.0_67]