74 votes

Quand un ConcurrentSkipListSet est-il utile?

Je viens de voir cette structure de données sur l'API Java 6 et je suis curieux de savoir quand ce serait une ressource utile. J'étudie pour l'examen SCJP et je ne le vois pas dans le livre de Kathy Sierra, même si j'ai déjà vu de fausses questions d'examen qui en font mention.

158voto

tgamblin Points 25755

ConcurrentSkipListSet et ConcurrentSkipListMap sont utiles lorsque vous avez besoin d'une triés conteneur qui sera accessible par plusieurs threads. Ce sont essentiellement les équivalents de TreeMap et TreeSet pour code simultané.

La mise en œuvre de JDK 6 est basé sur la Haute Performance Dynamique sans Verrouillage des Tables de Hachage et de Liste de Jeux par m. maged Michael à IBM, qui montre que vous pouvez mettre en œuvre beaucoup d'opérations sur skip lists atomiquement à l'aide de comparer et d'échange (SAE) des opérations. Ce sont sans verrouillage, de sorte que vous n'avez pas à vous inquiéter à propos de la surcharge de l' synchronized (pour la plupart des opérations) lorsque vous utilisez ces classes.

Il n'y a actuellement aucun Rouge-Noir arbre simultanée de la Carte/Jeu de mise en œuvre en Java. J'ai regardé à travers la littérature un peu et trouvé un couple de papiers qui ont montré simultanées RB arbres dépassant skip lists, mais beaucoup de ces tests ont été réalisés avec la mémoire transactionnelle, ce qui n'est pas pris en charge dans le matériel sur toutes les grandes architectures pour le moment.

Je suis en supposant que le JDK gars est parti avec un saut ici la liste parce que la mise en œuvre était bien connue et parce que faire sans verrouillage a été simple et portable (à l'aide de CAS). Si quelqu'un se soucie de préciser, s'il vous plaît. Je suis curieux de savoir.

3voto

irreputable Points 25577

les listes de sauts sont des listes triées, et efficaces pour modifier avec la performance log (n). à cet égard, c'est comme TreeSet. Cependant, il n'y a pas de ConcurrentTreeSet. ce que j’ai entendu dire, c’est que la liste de saut est très facile à mettre en œuvre, c’est probablement pour cette raison.

Quoi qu’il en soit, lorsque vous avez besoin d’un ensemble concurrent, trié et efficace, vous pouvez utiliser ConcurrentSkipListSet.

2voto

Kaleb Brasee Points 25776

Celles-ci sont utiles lorsque vous avez besoin d'un ensemble auquel plusieurs threads peuvent accéder simultanément et en toute sécurité. Il fournit également des performances décentes en étant faiblement cohérent - les insertions peuvent être faites en toute sécurité pendant que vous parcourez l'ensemble, mais rien ne garantit que votre Iterator verra cet insert.

0voto

TofuBeer Points 32441

Cela pourrait être utile (un article intitulé: Un algorithme de jeu basé sur une liste simultanée paresseuse, qui ressemble probablement à la description de la classe en question).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: