IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Collections] Classes thread-safe


Sujet :

Collection et Stream Java

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 528
    Points
    2 528
    Par défaut [Collections] Classes thread-safe
    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.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    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++

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 528
    Points
    2 528
    Par défaut
    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...

  4. #4
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Citation Envoyé par Traroth2 Voir le message
    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...
    Ce n'est pas parcque ton application est fortement thréadée que toutes les données manipulées seront attaquable par plusieurs threads.
    De ce fait, c'est a toi de determiner les données / traitement nécessitant d'être thread-safe.
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 154
    Points : 143
    Points
    143
    Par défaut
    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
    Bonne chance, Bonne journée, bonne année bonne santée et etc ...
    Youpi la vie est belle ! Et vive la fraicheur

  6. #6
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par Tiaps Voir le message
    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).

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 154
    Points : 143
    Points
    143
    Par défaut
    Merci pour ta réponse Deadpool.
    C'est exactement ce que j'attendais comme réponse ^^
    Bonne chance, Bonne journée, bonne année bonne santée et etc ...
    Youpi la vie est belle ! Et vive la fraicheur

Discussions similaires

  1. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 09/01/2007, 13h00
  2. Code "Thread Safe" ?
    Par Neitsa dans le forum C++
    Réponses: 3
    Dernier message: 23/12/2005, 14h33
  3. [MFC] CMAP non thread safe ?
    Par fmarot dans le forum MFC
    Réponses: 5
    Dernier message: 04/10/2005, 13h21
  4. Héritage d'une classe thread
    Par SamCB500 dans le forum MFC
    Réponses: 4
    Dernier message: 07/07/2005, 15h35
  5. [MFC] classe thread
    Par Joeleclems dans le forum MFC
    Réponses: 13
    Dernier message: 24/05/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo