CopyOnWriteArrayList — это потокобезопасная коллекция, введённая в Java 5, которая предоставляет безопасную альтернативу ArrayList для многопоточных окружений. Она реализует интерфейс List и допускает все элементы, включая null-значения.
В отличие от ArrayList, все операции изменения — такие как add(), set() и remove() — реализованы путём создания свежей копии базового массива. Этот механизм copy-on-write обеспечивает потокобезопасность без необходимости явной синхронизации со стороны вызывающего кода.
| Аспект | CopyOnWriteArrayList | ArrayList |
|---|---|---|
| Потокобезопасность | Полностью потокобезопасна | Не потокобезопасна |
| Производительность записи | Больше накладных расходов из-за копирования | Выше производительность записи |
| Производительность чтения | Отличная (без блокировок) | Отличная (без блокировок) |
| Случаи использования | Многопоточные сценарии с частыми чтениями | Однопоточный или синхронизированный доступ |
Итератор CopyOnWriteArrayList имеет два важных свойства:
CopyOnWriteArrayList идеален, когда тебе нужно:
Рассмотри ArrayList с внешней синхронизацией или другие concurrent-коллекции для сценариев с частыми записями, так как накладные расходы на копирование могут негативно сказаться на производительности.
CopyOnWriteArrayList создаёт свежую копию базового массива при каждой мутирующей операции, гарантируя, что читатели видят согласованный снимок без необходимости блокировок во время операций чтения.
Новый — ещё не проверен сообществом
Вы