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 couvert dans le livre de Kathy Sierra, même si j'ai vu des questions d'examen blanc qui le mentionnent.Quand est-ce qu'un ConcurrentSkipListSet est utile?
Répondre
ConcurrentSkipListSet et ConcurrentSkipListMap sont utiles lorsque vous avez besoin d'un conteneur trié accessible par plusieurs threads. Ce sont essentiellement les équivalents de TreeMap et TreeSet pour le code concurrent. L'implémentation pour JDK 6 est basée sur High Performance Dynamic Lock-Free Hash Tables and List-Based Sets par Maged Michael chez IBM, ce qui montre que vous pouvez implémenter beaucoup d'opérations sur des listes de sauts de manière atomique en utilisant les opérations compare and swap (CAS). Ceux-ci sont sans verrou, donc vous n'avez pas à vous soucier de la surcharge de synchronized
(pour la plupart des opérations) lorsque vous utilisez ces classes.
Il n'y a actuellement aucune implémentation Map/Set simultanée basée sur Red-Black tree en Java. J'ai parcouru un peu la littérature et trouvé un couplepapers qui montrait que les arbres RB concurrents surpassaient les listes de sauts, mais beaucoup de ces tests ont été faits avec transactional memory, ce qui n'est pas supporté dans le matériel sur les architectures majeures pour le moment. Je suppose que les gars du JDK sont allés avec une liste de saut ici parce que l'implémentation était bien connue et parce que la rendre sans verrou était simple et portable (en utilisant CAS). Si quelqu'un se soucie de clarifier, s'il vous plaît faire. Je suis curieux.
Les listes de sélection sont des listes triées et efficaces pour modifier les performances de log (n). à cet égard, c'est comme TreeSet. Cependant, il n'y a pas de ConcurrentTreeSet. ce que j'ai entendu, c'est que la liste de sauts est très facile à mettre en œuvre, c'est probablement pourquoi.
Quoi qu'il en soit, quand vous avez besoin d'un ensemble simultané, trié et efficace, vous pouvez utiliser ConcurrentSkipListSet
Elles sont utiles lorsque vous avez besoin d'un ensemble qui peut en toute sécurité accessible par plusieurs threads simultanément. Il fournit également des performances correctes en étant faiblement cohérent - les insertions peuvent être effectuées en toute sécurité pendant que vous parcourez le Set, mais il n'y a aucune garantie que votre Iterator verra cet insert.
ConcurrentSkipListMap était une trouvaille fantastique quand j'ai dû implémenter une couche de réplication pour un cache développé en interne. Les aspects Map ont implémenté le cache et les aspects List sous-jacents m'ont permis de suivre l'ordre dans lequel les objets sont apparus dans le cache. L'aspect "skip" de cette liste rendait efficace le fait de retirer un objet d'un endroit de la liste et de le déplacer à la fin lorsqu'il était remplacé dans le cache.
- 1. Quand SqlConnection.RetrieveStatistics() est-il utile?
- 2. Quand la différence entre quotRem et divMod est-elle utile?
- 3. Quand le pointeur sur le tableau est-il utile?
- 4. Quand un appel de méthode paramétré est-il utile?
- 5. Quand une bascule Ruby serait-elle utile?
- 6. ce code est-il utile?
- 7. Dans quels cas alloca() est-il utile?
- 8. Cette formation de printemps est-elle utile?
- 9. Est-ce que protect_from_forgery de Rails est vraiment utile?
- 10. L'effet Ajax coins arrondis est utile pour?
- 11. Quel est l'objet SqlConnection.BeginTransaction utile pour
- 12. Quelle est la méthode BlockingCollection.TakeFromAny utile pour
- 13. La classe WPF Decorator est-elle utile?
- 14. Quelle est la position: relative utile pour?
- 15. Cela est-il utile si (this! = Null)?
- 16. Est-ce que le filetage est nécessaire/utile?
- 17. Est-ce que djblets est toujours utile avec Django 1.2?
- 18. L'index mysql est-il utile sur la colonne 'état' quand on ne fait que des opérations sur la colonne?
- 19. Java parallèle (utile) packages
- 20. Opérateur gabarit [] ... possible? Utile?
- 21. Comment le titane est utile dans le développement d'applications Android?
- 22. Le mode d'altération de Perl est-il utile?
- 23. Python Modules est la lecture la plus utile
- 24. Une liste de cases à cocher est-elle utile?
- 25. Quelle documentation est utile lors du support d'une application?
- 26. Est un drupal Voir utile pour ce cas d'utilisation
- 27. Quand mysql_real_escape_string() est nécessaire?
- 28. Quand __repr __() est appelée?
- 29. Substituer la charge utile d'Astoria?
- 30. Clé étrangère Utile dans SQLite?
Il est également utile si vous souhaitez effectuer le suivi des enregistrements uniques dans un environnement multithread d'une manière performante. – anataliocs