以下はコードですが、subiter.next()
の呼び出しでConcurrentModificationException
が呼び出されていますが、基になるコレクションとそのスレッドを1つのスレッドとして実行しているわけではありません。このコードがConcurrentModificationExceptionをスローしているのはなぜですか?
Tree tree=partition.getTreeofThisPartition();
Set<DzExpressionHostTupel> oldSubtupels=tree.getSubscribers();
Iterator<DzExpressionHostTupel> subiter=oldSubtupels.iterator();
while (subiter.hasNext()){
DzExpressionHostTupel subtupel=subiter.next();
tree.removeSubscriber(subtupel);
}
可能性のある複製http://stackoverflow.com/questions/1655362/concurrentmodificationexception-despite-using-synchronized – NageN
'tree.removeSubscriber(subtupel)'の代わりに 'subiter.remove()'メソッドを使用する必要があります。 – NageN
以前に追加された既存のツリーから要素を削除する必要があります。iterator.remove()はそれを行いません。 –