多数のスレッド間で共有される文字列のリストがあります。各スレッドは次のことを行う必要があります。
- リストにアクセスします (たとえば、getter メソッドを介して)。
- リストのサイズを取得します。
- ゼロから list.size() までの乱数 n を選択します。
- リストからオフセット n の要素を抽出します。
- 抽出された要素をリストから削除します。
- リストを「保存」して、他のスレッドが常に更新されたリストを表示できるようにします
変更可能な共有オブジェクト (リスト) への同時アクセスがあるため、スレッドセーフな方法でコーディングする必要があります。各スレッドはリスト サイズを 1 ずつ減らす必要があるため、他のすべてのスレッド アクセスはより短いリストを参照する必要があります。私の目的は、同じ要素が 2 回抽出される可能性があるため、スレッドが別のスレッドから見た同じリストを見ることができないようにすることです。
これを達成するための最良の方法はどれですか? CopyOnWriteArrayList について考えていましたが、必要なように動作するかどうかわかりません。
ありがとうございました