-1

このコードブロックの ConcurrentModificationException を取得するにはどうすればよいですか?

synchronized (list) {
        for (Iterator<?> it = list.iterator(); it.hasNext(); ) {
            Object object = it.next();
            // do something to object without touching list
        }
}

編集: 申し訳ありませんが、それは十分に具体的ではありませんでした: // リストに触れないオブジェクトに対して何かを行います

4

2 に答える 2

7

たとえば、別のスレッドでリストを変更します。

このコード ブロックを同期したからといって、リストへのすべてのアクセスがブロックされるわけではありません。リストで同期されている他のすべてのブロックが並行して実行できないことを確認するだけです。

リストが複数のスレッドで共有されている場合、すべての使用状況を同じモニターで同期する必要があります。

于 2012-04-19T13:29:26.817 に答える
2

「何かをする」が直接的または間接的に何かを追加または削除する場合list(使用it.remove()または同様のものを除く)、この例外が発生します。この場合、同期によって発生が停止されることはありません。

于 2012-04-19T13:27:07.170 に答える