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