ConcurrentSkipListSet y ConcurrentSkipListMap son útiles cuando necesitas un contenedor ordenado al que accederán varios subprocesos. Estos son esencialmente los equivalentes de TreeMap y TreeSet para código concurrente.
La implementación de JDK 6 se basa en tablas hash dinámicas sin bloqueo de alto rendimiento y conjuntos basados en listas de Maged Michael en IBM, lo que demuestra que puede implementar muchas operaciones en listas de omisión de forma atómica mediante operaciones de comparación e intercambio (CAS) . Estos no tienen bloqueos, por lo que no tiene que preocuparse por la sobrecarga de synchronized
(para la mayoría de las operaciones) cuando usa estas clases.
Actualmente no existe una implementación simultánea de mapas / conjuntos basada en árbol rojo-negro en Java. Revisé un poco la literatura y encontré un par de artículos que mostraban que los árboles RB concurrentes superaban a las listas de omisión, pero muchas de estas pruebas se realizaron con memoria transaccional , que en este momento no es compatible con hardware en ninguna arquitectura importante.
Supongo que los chicos de JDK eligieron una lista de omisión aquí porque la implementación era bien conocida y porque hacerlo sin bloqueos era simple y portátil (usando CAS). Si alguien quiere aclarar, hágalo. Soy curioso.