
Java MultiThreaded環境では、メソッドがリソース検出中に同時変更に遭遇した場合、例外がスローされる場合があります。この時点で、オブジェクトは非変更状態にあります。
ConcurrentModificationException
以下は例外の例です
この例外は通常、次の場合に発生します
ConcurrentModificationException
例外の検出と反復は、
メソッドでは定義されていません。
1 2 3 4 | Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList $Itr .checkForComodification(ArrayList.java:000)
at java.base/java.util.ArrayList $Itr .next(ArrayList.java:000)
at com.journaldev.ConcurrentModificationException.ConcurrentModificationExceptionExample.main(ConcurrentModificationExceptionExample.java:00)
|
ログイン後にコピー
という名前の内部フラグを使用して、速い故障したイテレーターがループ内のブロックをブロックします。
このアルゴリズムは、Java環境で例外を生成する方法を示しています。いくつかのソリューションを探索するために、いくつかのJavaコードを記述します。 ConcurrentModificationException
プロセスを開始します。 java.util.ConcurrentModificationException
- 必要なJavaパッケージを宣言してインポートします。
- 公開クラスを宣言します。
- 文字列パラメーターを宣言します。
- アレイリストオブジェクトを作成します。
- 新しいarrayListを作成します。
- ArrayListを入力します。
- トライブロックを宣言します。
- 印刷リスト。
- イテレーターを宣言します。
- ループ中に使用して次の値を横断します。
- 反復中に値を追加します。
- 更新されたアレイリストを印刷します。
- ループ中に使用して次の値を横断します。
- 例外をキャッチします。
- 例外情報を印刷します。
- 値を取得します。
- プロセスを停止します。
- 例外構文
次の構文は、java環境で例外を生成する方法を示しています。
ConcurrentModificationException
上記の構文は、java環境で
例外を生成する方法を示しています。
ConcurrentModificationException
solution
ConcurrentModificationException
メソッド1:反復プロセス中に変更
この方法は、反復プロセス中にコレクションを直接変更します。ファーストフェイルのイテレーターが失敗すると、例外がスローされます。
および
メソッドを使用し、ループ
1 2 3 4 5 6 | for (Iterator<Integer> iterator = integers.iterator(); iterator.hasNext();) {
Integer integer = iterator.next();
if (integer == 2) {
iterator.remove();
}
}
|
ログイン後にコピー
- このメソッドはメソッドを使用します。セットがマルチスレッド環境で変更されると、例外がスローされます。
next()
remove()
結論
ConcurrentModificationException
例外は通常、コレクションが同時に変更されたときに発生します。この記事では、この例外を回避する方法について説明し、対応するJavaコードの例を提供します。 この例外は、CopyOnWriteArrayList
やConcurrentHashMap
などのスレッドセーフコレクションクラスと、Iteratorのremove()
メソッドを使用して効果的に回避できます。
以上がJavaでのConcurrentModificationExceptionを例での詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。