ホームページ >Java >&#&チュートリアル >Java にカスタム スレッド オブジェクトを保存するときに ArrayList をスレッドセーフにする方法
Java で ArrayList をスレッドセーフにする: 代替アプローチ
マルチスレッド プログラミングのコンテキストでは、共有リソースがArrayList などのデータには安全にアクセスできるため、データの不整合や同時実行の問題が回避されます。この記事では、特に Thread クラスを拡張するカスタム オブジェクトが含まれている場合に、Java で ArrayList のスレッド セーフ性に対処する別のアプローチについて説明します。
特定のシナリオでは、RaceCar オブジェクトを格納する ArrayList があります。そして、ArrayList に完成した RaceCar オブジェクトを設定する Race クラス内のコールバック メソッド (addFinisher) です。ただし、Collections.synchronizedCollection() メソッドを使用して ArrayList をスレッドセーフにしようとしたときにエラーが発生しました。
発生したエラーは、Collection と ArrayList の間の型の不一致が原因でした。 Collections.synchronizedCollection() は Collection を返しますが、これを ArrayList 変数に割り当てようとしました。代わりに、スレッドセーフな ArrayList を返す Collections.synchronizedList() メソッドを利用する必要があります。
<code class="java">finishingOrder = Collections.synchronizedList(new ArrayList(numberOfRaceCars));</code>
Collections.synchronizedList() を使用すると、基になる ArrayList をラップする新しい同期された ArrayList を作成できます。この同期リストにより、リストへのすべてのアクセスが確実に同期され、複数のスレッドが同時にリストを変更しようとすることが防止されます。
このアプローチは、ArrayList の機能を維持しながら ArrayList をスレッドセーフにする便利で効果的な方法を提供します。コード。これにより、データの整合性の問題を心配することなく、マルチスレッド環境で RaceCar オブジェクトを安全に追加および取得できます。
以上がJava にカスタム スレッド オブジェクトを保存するときに ArrayList をスレッドセーフにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。