同時変更例外:

Feb 09 2023
主なメソッドは、リストに整数を追加しようとすることです。メインメソッド内で、子スレッドを開始します。

主なメソッドは、リストに整数を追加しようとすることです。

メインメソッド内で、子スレッドを開始します。つまり

t.start()

現在、2 つのスレッドが処理されています。

ここで、メインスレッドはリストの要素を反復しようとし、このプロセス内で子スレッドはリストに要素 4 を追加しようとします。

したがって、ConcurrentModificationException が発生します。

ConcurrentModificationException を回避するにはどうすればよいですか?

1. ConcurrentCollectionException が発生しない concurrentHashmap や CopyonWriteArrayList などの同時コレクションを利用できます。

2.コレクションクラスを反復する代わりに、 Array を反復できますが、これは配列サイズが大きすぎる場合にのみパフォーマンスを低下させます。

ノート:

他のスレッドがコレクション オブジェクトを変更しようとした場合にのみこの例外がスローされることは必須ではありません。単一のスレッドにオブジェクトのコントラクトに違反しようとする何らかのメソッドがある場合にこの例外がスローされる可能性があります。