ArrayList をスレッドセーフにする: Java での代替アプローチ
マルチスレッド アプリケーションでは、競合状態を防ぐためにスレッド セーフを確保することが重要です。データの破損。一般的なタスクの 1 つは、ArrayList などの共有データ構造を同期して管理することです。
ArrayList が Thread クラスを拡張する RaceCar オブジェクトを格納するシナリオを考えてみましょう。 Race クラスは、完成した RaceCar オブジェクトを追加するコールバック メソッドを通じてこの ArrayList を管理します。目標は、これらのスレッドが実行を終了する順序を維持することです。ただし、同期せずに ArrayList を使用すると、スレッド セーフの問題が発生する可能性があります。
これに対処するには、Collections.synchronizedCollection(c Collection) を使用して、ArrayList の同期バージョンを作成しようとします。ただし、この方法では、型の不一致によりコンパイラ エラーが発生します。
より適切な解決策は、Collections.synchronizedList() を使用することです。このメソッドは、既存の ArrayList を引数として受け取り、そのリストの同期されたバージョンを返します。以下に例を示します。
<code class="java">ArrayList<RaceCar> finishingOrder = Collections.synchronizedList(new ArrayList<>(numberOfRaceCars));</code>
このコードは、同期された方法で RaceCar オブジェクトを保存および操作するために使用できる、スレッドセーフな ArrayList、finishingOrder を作成します。 Collections.synchronizedList() を利用すると、ArrayList に対する操作がアトミックに実行されるようになり、スレッドの干渉やデータ破損の可能性を排除できます。
以上がJava で ArrayList をスレッドセーフにする方法: `Collections.synchronizedCollection()` は正しいアプローチですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。