CopyOnWriteArrayList и CopyOnWriteArraySet — реализации интерфейсов List и Set соответственно, входящие в пакет java.util.concurrent.
Их ключевая особенность - мутабельные операции (add, remove, set) создают новую копию внутреннего массива, на которую затем ссылается объект коллекции. Чтение же происходит с использованием текущего массива.
Преимущества:
ConcurrentModificationException при модификации коллекции другим потоком.Недостатки:
add, remove, set) создает новую копию массива, что может быть дорого по времени и памяти для больших коллекций или частых модификаций.Типичные сценарии использования:
Пример использования CopyOnWriteArrayList:
java
В сравнении с другими потокобезопасными коллекциями, например, синхронизированными оболочками (Collections.synchronizedList) или коллекциями из пакета java.util.concurrent (например, ConcurrentHashMap), CopyOnWrite коллекции предлагают специфичный компромисс между производительностью чтения и записи и потокобезопасностью. Они идеально подходят для сценариев "читаешь много, пишешь мало".