インデックスで要素にアクセスできる並行Listインスタンスを作成する方法を教えてください。 JDKに使用できるクラスやファクトリメソッドはありますか?
Java.util.concurrent に並行リストの実装があります。 特にCopyOnWriteArrayList 。
インデックスベースのアクセスを気にせず、単にListの挿入順を保持する特性が必要な場合は、 Java.util.concurrent.ConcurrentLinkedQueue これはIterableを実装しているので、すべての項目を追加し終えたら、拡張for構文を使用してコンテンツをループ処理できます。
Queue<String> globalQueue = new ConcurrentLinkedQueue<String>();
//Multiple threads can safely call globalQueue.add()...
for (String href : globalQueue) {
//do something with href
}
必要なのが単純な呼び出し同期だけである場合は、 Collections.synchronizedList(List) を使用することができます。
List<Object> objList = Collections.synchronizedList(new ArrayList<Object>());
位置を取得し、与えられた位置から要素を取得するという行為は、当然のことながら何らかのロックを必要とします(これら2つの操作の間でリストに構造的な変更を加えることはできません)。
コンカレント・コレクションの目的は、各操作がそれ自体でアトミックであり、明示的なロックや同期を行わなくても実行できることです。
したがって、指定されたn
からList
の位置にある要素をアトミック操作として取得することは、同時アクセスが予想される状況ではあまり意味がありません。