コード:
Map<Integer,DealCountUpdater> dealCountMap=new HashMap<Integer,DealCountUpdater>();
public void update(){
for(Map.Entry<Integer, DealCountUpdater> e:new HashMap<Integer,DealCountUpdater>(dealCountMap).entrySet()){//line:58
System.out.println(e.hashCode());
}
}
このコードを実行すると、以下の例外が発生します。
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at java.util.HashMap.putAllForCreate(HashMap.java:435)
at java.util.HashMap.<init>(HashMap.java:225)
at org.my.tuan.count.CountUpdater.update(CountUpdater.java:58)
at org.my.tuan._Maintainer.run(TuanSched.java:110)
この行はCountUpdater.java:58です:
for(Map.Entry<Integer, DealCountUpdater> e:new HashMap<Integer,DealCountUpdater>(dealCountMap).entrySet()){
ConcurrentHashMap
私はこのプログラムをグーグルで検索します、私はプレーンの代わりに使用できることを知っていますHashMap
、
しかし、私は知りたいのですが、なぜ私は:を使用しています
new HashMap<Integer,DealCountUpdater>(dealCountMap)
HashMapの新しいインスタンスを作成するには、それでもスローしConcurrentModificationException
ますか?
使用しないで修正する方法はConcurrentHashMap
?
手伝ってくれてありがとう :)