Java представила пакет java.util.concurrent в версии 1.5, который предоставляет потокобезопасные классы коллекций, разработанные для многопоточных окружений. Эти коллекции поддерживают безопасный одновременный доступ и могут изменяться во время итерации без выброса исключений.
Основные преимущества конкурентных коллекций включают:
ConcurrentModificationExceptionОсновные доступные в Java классы конкурентных коллекций:
ConcurrentHashMap — потокобезопасная реализация хеш-таблицыCopyOnWriteArrayList — потокобезопасный список с механизмом copy-on-writeCopyOnWriteArraySet — потокобезопасное множество на основе CopyOnWriteArrayListConcurrentLinkedQueue — неограниченная потокобезопасная очередьConcurrentLinkedDeque — неограниченная потокобезопасная двусторонняя очередьArrayBlockingQueue — ограниченная блокирующая очередь с фиксированной ёмкостьюLinkedBlockingQueue — опционально ограниченная блокирующая очередьLinkedBlockingDeque — блокирующая двусторонняя очередьPriorityBlockingQueue — неограниченная блокирующая очередь с приоритетным упорядочиваниемБлокирующие очереди особенно полезны для сценариев производитель-потребитель, так как они автоматически управляют координацией потоков. Copy-on-write коллекции хорошо работают, когда операций чтения значительно больше, чем операций записи, несмотря на более высокую стоимость записи. Выбирай подходящий класс исходя из твоих конкретных требований к границам ёмкости, блокирующему поведению и паттернам операций.
Fail-safe итераторы в конкурентных коллекциях, таких как ConcurrentHashMap, никогда не выбрасывают ConcurrentModificationException, потому что они работают со снимком коллекции, сделанным в момент создания итератора.
Новый — ещё не проверен сообществом
Вы