В Java есть множество разных коллекций, предназначенных для параллелизма и безопасности потоков, и я не понимаю, что выбрать для моей ситуации.Самый эффективный, но потокобезопасный список/набор
Несколько потоков могут звонить .add()
и .remove()
, и я буду копировать этот список часто с чем-то вроде List<T> newList = new ArrayList<T>(concurrentList)
. Я никогда не буду перебирать параллельный список.
Я думал о чем-то вроде CopyOnWriteArrayList
, но я читал, что он может быть очень неэффективным, потому что он копирует себя каждый раз, когда он изменен. Я надеюсь найти хороший компромисс между безопасностью и эффективностью.
Каков наилучший список (или набор) для этой ситуации?
Вы уверены, что вам нужен список? Будет ли карта или набор соответствовать вашим потребностям. Гораздо проще иметь одновременный доступ к карте или набору, чем список. – bhspencer
@bhspencer Да, я думаю, что набор может работать. – RogueCSDev
Если вы обычно добавляете и удаляете элементы с конца, и вы часто копируете список, наиболее эффективная структура данных будет неизменным односвязным списком, к которому, к сожалению, нет java-файла, но это очень простая структура данных, поэтому вы можете быстро реализуйте его самостоятельно. – SpiderPig