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

Concurrence et multi-thread Java Discussion :

[Conception] Thread local


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut [Conception] Thread local
    Bonjour
    Quelqu'un pourrait il m'expliquer ce que ce terme veut dire et en quoi ca consiste, et surtout pourquoi on le fait.
    Bien cordialement

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    Un thread est un thread...

    je suposse que le "local" veut dire que c'est une classe anonyme.

    Quand a l'utlité d'un thread... il peut tout et rien .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 53
    Par défaut
    Un thread local est une classe de la JDK5 (ThreadLocal pour la nommer). Cette classe permet de gérer des variables dont l'état dépend d'un contexte (d'un thread). Par exemple, si tu veux créer une classe qui contient un indentifiant unique par thread, comme le montre l'exemple ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import java.util.concurrent.atomic.AtomicInteger;
     
     public class UniqueThreadIdGenerator {
     
         private static final AtomicInteger uniqueId = new AtomicInteger(0);
     
         private static final ThreadLocal < Integer > uniqueNum = 
             new ThreadLocal < Integer > () {
                 @Override protected Integer initialValue() {
                     return uniqueId.getAndIncrement();
             }
         };
     
         public static int getCurrentThreadId() {
             return uniqueId.get();
         }
     } // UniqueThreadIdGenerator

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 53
    Par défaut
    erratum: ThreadLocal existe depuis la JDK1.2

  5. #5
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Tu sais tu peux éditer tes posts c'est plus pratique des fois

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Tout d'abord messieurs je tiens a vous remercier pour votre participation a ce topic.
    Mes connaissances etant limite en java, classe debutant oblige
    Quand tu dis
    Cette classe permet de gérer des variables dont l'état dépend d'un contexte
    Ca veut dire quoi exactement, parce que pour moi l'etat d'une variable est soit utilisee donc active, soit inutilisee donc inactive. D'autre part que vient faire le mot Context que j'ai deja vue ailleurs en J2EE sans vraiment comprendre ce que c'est.
    Parles tu de la meme chose ???
    Merci pour votre aide.


  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Rien à voir pour contexte et Context dans ce que disais 1tox.

    Je vais essayer une autre approche pour t'expliquer :

    Supposons que nous avons un objet (objet1) et que cet objet a un attribu (attribut1). Cet objet correspond d'une certaine manière à un bout de mémoire.
    Cet objet peut être utilisé par deux Threads, nommons les thread 1 et thread 2. Ces threads correspondent plus ou moins à des processus différents pour le système, ou plus simplement à des programmes séparés à l'intérieur de ton programme.

    Si attribut1 est d'un type quelconque (pas ThreadLocal), alors thread 1 et thread 2 lorsqu'ils parlent de attribut 1 parlent du même emplacement mémoire. Cet emplacement mémoire est donc partagé entre les deux Thread.

    En revanche, si attribut1 est un ThreadLocal, il est spécifique à chaque Thread, donc il s'agit de deux zones mémoire différentes pour thread 1 et thread 2.

    Petite précision : en fait ce n'est pas le ThreadLocal qui est partagé ou non mais ce que tu mets dedans (voir set et get de ThreadLocal).

    C'est plus clair ?

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Je te remercie c'est en effet plus clair.
    Toutefois il faut de la pratique pour ce genre de d'appli. Mais alors quel genre d'application pourrait utiliser le thread local et dans quel but??? Quel gain effectif peut on avoir????
    PUisqu'en fait tu es en train de me decire une espece de synchronisation, ne peut on pas le faire avec Synchronized ???

    Bien Cordialement

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Dans un serveur d'appli J2EE, en gros un thread = une requête. On peut donc utiliser le ThreadLocal pour associer au thread (et donc à la requête) une transaction, un utilisateur, une connexion base de données etc ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 24/04/2010, 01h07
  2. Problème de conception Thread et Socket
    Par NeqO55 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 15/10/2009, 09h57
  3. thread local problème
    Par nadsky dans le forum Général Java
    Réponses: 16
    Dernier message: 20/05/2008, 11h41
  4. Question de conception: thread
    Par Flophx dans le forum POSIX
    Réponses: 27
    Dernier message: 22/02/2007, 00h02
  5. [Conception] Threading
    Par mouloude dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 08/12/2004, 10h17

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