Лучшее решение зависит от варианта использования. Если вам нужна упорядоченная коллекция случайных совпадений, то есть 3 варианта.
1) Тот, который вы описали (Synchronized List). Он будет работать так же быстро, как подкладочный тип Collection, с drawBack, что вся коллекция будет заблокирована для Thread acces.
Кроме того, реализация Итератора по умолчанию не является Threadsafe и поэтому требует дополнительных мер threadSafty. (Иетатор часто используется в forEach, clear
и других реализациях по умолчанию (java 8)).
2)CopyOnWriteArrayList. Это единственный ThreadSafe (включая Iterator с функцией моментального снимка) randomAcces List в JDK.
Недостатком является то, что он копирует данные при добавлении/удалении данных. Это может быть не проблема для небольших коллекций, хотя базовое правило заключается в том, что это лучшее решение, когда есть значительно более «прочитанные» действия, чем действия «писать».
3)Vector. Это немного медленнее на действия «читать», связанные с CopyOnWriteList, хотя механизм «записи» не требует создания копии данных резервного копирования.
Недостатком этого является то, что Итератор также не является ThreadSafe. Разница с Синхронизированным списком заключается в том, что он будет работать лучше, чем SynchronizedList, когда есть значительно больше потоков, связанных с коллекциями.
Sumarry:
Synchronized List
- Высокая производительность с низким числом экранных нитей.
- Итератор не Потокобезопасная
CopyOnWriteArrayList
- Быстрая производительность «читать» действиям
- копии данных аккомпанемента на действия «записи» (могут быть проблемы с большими Collections)
- Итератор защищен резьбой (с использованием функции моментального снимка)
Vector
- Более высокая производительность (compaired в список синхронизированного) с большим количеством экранного Threads.
- Итератор не Потокобезопасная
Если потоки изменяют объекты 'Variable' в списке, то класс' Variable' должен быть потокобезопасным, а не списком. –
Это работает, список будет потокобезопасным. –
Если переменная Variable.class является изменяемой, то у вас есть общее состояние на этих объектах, что может привести к другому «состоянию гонки». –