Есть ли параллельный список в Java JDK?

Как создать экземпляр параллельного экземпляра, где я могу получить доступ к элементам по индексу? Есть ли у JDK какие-либо классы или методы factory, которые я могу использовать?

Ответ 2

Если вам не нужен доступ на основе индексов и вы просто хотите сохранить свойства сохранения списка в списке, вы можете рассмотреть java.util.concurrent.ConcurrentLinkedQueue. Поскольку он реализует Iterable, как только вы закончите добавлять все элементы, вы можете перебрать содержимое с помощью расширенного синтаксиса:

Queue<String> globalQueue = new ConcurrentLinkedQueue<String>();

//Multiple threads can safely call globalQueue.add()...

for (String href : globalQueue) {
    //do something with href
}

Ответ 3

Вы можете очень хорошо использовать Collections.synchronizedList(List), если вам нужна простая синхронизация вызовов:

 List<Object> objList = Collections.synchronizedList(new ArrayList<Object>());

Ответ 4

Поскольку действие по приобретению позиции и получение элемента из данной позиции, естественно, требует некоторой блокировки (вы не можете иметь список структурных изменений между этими двумя операциями).

Сама идея параллельной коллекции состоит в том, что каждая операция сама по себе является атомарной и может быть выполнена без явной блокировки/синхронизации.

Поэтому получение элемента в позиции n из заданного List в качестве атомной операции не имеет особого смысла в ситуации, когда ожидается параллельный доступ.