ConcurrentSkipListSet и ConcurrentSkipListMap полезны, когда вам нужен отсортированный контейнер, к которому будут обращаться несколько потоков. По сути, это эквиваленты TreeMap и TreeSet для параллельного кода.
Реализация для JDK 6 основана на Высокопроизводительных динамических хэш-таблицах без блокировок и наборах на основе списков от Maged Michael в IBM, показывающих, что вы можете выполнять множество операций над списками пропуска атомарно используя операции сравнения и обмена (CAS) . Они не блокируются, поэтому вам не нужно беспокоиться о накладных расходах synchronized
(для большинства операций) при использовании этих классов.
На данный момент нет Красно-чёрного дерева параллельной реализации Map / Set в Java. Я немного просмотрел литературу и обнаружил пару статей , которые показывали параллельные деревья RB, превосходящие списки пропусков, но многие из этих тестов были выполнены с транзакционной памятью, который в настоящее время не поддерживается аппаратно на каких-либо крупных архитектурах.
Я предполагаю, что ребята из JDK пошли со списком пропущенных здесь, потому что реализация была хорошо известна, и потому что сделать ее без блокировки было простым и переносимым (с использованием CAS). Если кто-то хочет уточнить, пожалуйста, сделайте. Мне любопытно.