HashMap ConcurrentModificationException

时间:2014-12-08 01:25:55

标签: java hashmap concurrentmodification

我无法弄清楚为什么我在我的"清除循环"上获得了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]

0 个答案:

没有答案