| Коллекция | Структура данных | Синхронизация | Свойства |
|---|---|---|---|
| 🗺️ Map impl ConcurrentMap / ConcurrentNavigableMap | |||
| ConcurrentHashMap |
Node<K,V>[] table (buckets)
📘 как в HashMap
|
Blocking
lock‑stripping на бакеты CAS |
weakly consistent
Замена Hashtable
|
| ConcurrentSkipListMap |
Skip list из нод (головные узлы, башни) |
Lock‑free
CAS |
weakly consistent
sorted
|
| 🧩 Set impl NavigableSet / Set | |||
| ConcurrentSkipListSet | ConcurrentSkipListMap | Lock‑free CAS |
weakly consistent
sorted
|
| CopyOnWriteArraySet | CopyOnWriteArrayList | Blocking (writes)
copy on write
|
only reads high concurrency
snapshot iterator
Хорош для маленьких наборов
|
| 📋 List impl List | |||
| CopyOnWriteArrayList |
Object[] array
📘 как в ArrayList
|
Blocking (writes)
copy on write |
only reads high concurrency
snapshot iterator
Хорош для маленьких наборов
|
| ⏳ Queue / Deque (non‑blocking) impl Queue / Deque | |||
| ConcurrentLinkedQueue |
Linked nodes (Michael‑Scott queue)
📘 как в LinkedList (FIFO)
|
Lock‑free CAS (M&S algorithm) |
weakly consistent
unbounded
Высокая пропускная способность
|
| ConcurrentLinkedDeque |
Linked nodes (double‑ended)
📘 как в LinkedList (LIFO и FIFO)
|
Lock‑free CAS |
weakly consistent
|
| 🔒 BlockingQueue (producer‑consumer) impl BlockingQueue | |||
| ArrayBlockingQueue |
Circular array (fixed capacity)
📘 как в ArrayDeque, но с ограничением размера
|
Blocking
ReentrantLock+ Condition |
weakly consistent
bounded
fairness (no starvation)
Подходит для небольших данных, где важно предсказуемое время работы. Часто используется в пулах потоков
|
| LinkedBlockingQueue |
Linked nodes (optionally bounded)
📘 как в LinkedList
|
Blocking
Two ReentrantLocks(takeLock/putLock) + Condition |
weakly consistent
optionally‑bounded
По умолчанию неограниченная. Производительней ArrayBlockingQueue. Часто используется в пулах потоков
|
| PriorityBlockingQueue |
Object[] queue (binary heap)
📘 как в PriorityQueue
|
Blocking
ReentrantLock+ CASдля увеличения ёмкости массива (ожидающие — yield() в цикле) |
weakly consistent
priority (sorted)
unbounded
Итерация без гарантий порядка и актуальности
|
| SynchronousQueue Rendezvous (встреча) потоков.
Потоки находятся в состоянии ожидания (LockSupport.park()) и каждый держит объект для передачи
|
TransferQueue/TransferStack. Хранят waiter (поток) и item (объект).
🎯 нет аналога — передача объекта «из рук в руки» между встретившимися потоками
|
Wait‑free
CAS
|
Каждый put ждёт take. Часто используется в пулах потоков (e.g., CachedThreadPool)
|
| Имя | Проблема | Гарантия | Типичная реализация в JDK | |
|---|---|---|---|---|
Blocking |
Блокировка при зависании держателя, Deadlock, Livelock, Starvation | Никаких | Мониторы (synchronized, ReentrantLock) |
|
| Non‑blocking | Obstruction‑Free | Livelock | Любой поток гарантированно завершит свою операцию за конечное число шагов, если он останется один (остальные приостановлены) | Почти нет в JDK |
Lock‑free |
Starvation | Хотя бы один поток в системе продвигается | CAS | |
Wait‑free |
Никаких | Каждый поток завершит операцию за конечное число шагов | Сложная. Потоки могут помогать друг другу. Пример: SynchronousQueue |