Как создать экземпляр параллельного экземпляра, где я могу получить доступ к элементам по индексу? Есть ли у JDK какие-либо классы или методы factory, которые я могу использовать?
Есть ли параллельный список в Java JDK?
Ответ 1
Существует реализация параллельного списка в java.util.concurrent. CopyOnWriteArrayList в частности.
Ответ 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
в качестве атомной операции не имеет особого смысла в ситуации, когда ожидается параллельный доступ.