Bonjour tout le monde,
J'ai rencontré récemment lors de mon développement une classe qui s'appelle ThreadLocal,
C'est quoi donc cette classe ? son rôle, son utilité ? j'aimerais bien avoir aussi un exemple d'utilisation de cette classe
Bonjour tout le monde,
J'ai rencontré récemment lors de mon développement une classe qui s'appelle ThreadLocal,
C'est quoi donc cette classe ? son rôle, son utilité ? j'aimerais bien avoir aussi un exemple d'utilisation de cette classe
Un ThreadLocal permet de fournir des variables qui vont être propre à chaque Thread et donc qui ne seront pas partagées entre les différents threads de ton application. Instanciée dans un singleton, ce threadlocal sera accessible de toute part durant la durée de vie du thread. Un grand nombre d'exemples peuvent être donnés quant à son utilisation :
garder la même connexion à une base de donnée, ou garder la même transaction durant tout le cycle du thread...
hmm à vrai dire j'ai pas bien compris la choz![]()
Admettons que tu aies un thread.
Depuis ce thread, tu demandes la valeur contenue dans une variable ThreadLocal ; il va t'en renvoyer une. Tu recommences 5 minutes après, depuis le même thread. Tu obtiendras la même valeur que précedemment.
Tu fais la même manip depuis un autre thread, avec la même variable ThreadLocal. La valeur que tu obtiendras alors ne sera pas la même que celle que tu auras obtenue dans l'autre thread. (enfin... en général).
Est-ce que c'est plus clair ?
Hmm j vois plus clair maintenant,
C'est comme si chaque Thread a sa propre variable, une sorte de boite non ?
Oui![]()
Il faut bien comprendre que la classe ThreadLocal ne s'utilise jamais directement, mais toujours par l'intermédiaire d'une classe héritiere. Cette héritière va écrire la méthode initialValue(), qui est appelée la première fois, et seulement la première fois, que un thread fait le get(). (à moins de diverses considération accessoires et annexes). Dans cet initialValue, tu définies la valeur que tu veux comme tu veux. La pratique normale est bien sûr de faire return new MaJolieValeur().
Partager