Bonjour,
Est-ce que quelqu'un pourrait m'indiquer un endroit où on peut trouver une liste plus ou moins exhaustive des classes Java Collections qui sont thread-safe et celles qui ne le sont pas ? Merci d'avance.
Version imprimable
Bonjour,
Est-ce que quelqu'un pourrait m'indiquer un endroit où on peut trouver une liste plus ou moins exhaustive des classes Java Collections qui sont thread-safe et celles qui ne le sont pas ? Merci d'avance.
Salut,
- Les classes de l'ancienne API sont thread-safe (Hashtable, Vector et Stack) mais ne devrait pas être utilisé en général.
- Sauf erreur, les classes de la "nouvelle" API de Collections (toutes les autres collections de java.util) ne sont pas thread-safe, mais il est possible d'en obtenir une version thread-safe via les méthodes Collections.synchronizedXXXX().
- Enfin les collections du package java.util.concurrent sont logiquement thread-safe...
a++
Ca veut dire que les seuls structures de données qu'on peut utiliser sans les synchroniser soi-même, c'est les objets retournés par Collections synchronizedXXX() et les objets dans java.util.concurrent, selon la bonne pratique qui veut que toute application doit être considérée comme une application multithreadée ? Ca bouleverse beaucoup de mes habitudes...
Bien le bonjour, je me permet d'intégrer cette conversation en posant une petite question.
Dans le cas où une COllection devrait être synchronisée, quelle solution choisir?
1/ Vector et etc...
2/ COllection standard (LinkedList et autre) synchronisé par nos soins
3/ les classes du package java.util.concurrent
Merci par avance p our vos réponses
Vector, Stack et Hashtable tu peux les oublier. Comme l'a dit adiGuba, ces classes ne devraient plus être utilisées.
En cas de besoin de collections thread-safe, on utilise généralement les versions synchronisées des collections standards (récupérées via les méthodes synchronisedXXX() de la classe Collections)
Les collections présentes dans le package java.util.concurrent servent surtout pour des besoins spécifiques :
- La BlockingQueue est une queue (une file donc F.I.F.O.) qui se bloque lorsque l’on tente d’ajouter ou de retirer un élément tant que l’espace disponible n’est pas suffisant (modèle producteur / consommateur).
- La ConcurrentMap est une Map thread-safe qui se distingue par le fait qu'elle peut être supervisée par plusieurs verrous d'exclusion c'est à dire qu'elle peut autoriser plusieurs écritures simultanées, contrairement à la Map classique synchronisée qui n'a qu'un seul verrou d'exclusion (1 seule écriture simultanée possible par conséquent).
Merci pour ta réponse Deadpool.
C'est exactement ce que j'attendais comme réponse ^^