Bonjour,
Ça fait longtemps que j'utilise des threads dans mes applications, et j'ai parfaitement l'habitude de travailler avec, mais ce matin, je suis tombé sur le principe de ThreadLocal et là...je suis embrouillé, j'ai du mal à percevoir la différence entre un Thread et un ThreadLocal.
D'après mes recherches, la différence se ferait au niveau des variables, mais je n'ai pas bien compris la différence.
Lorsque je lance un thread, par exemple pour gérer le socket d'un client. Ce thread a pour variable le flux d'entrée et le flux de sortie du socket.
Je pensais que les attributs utilisés étaient déjà exclusif au thread. Alors que si je comprends bien, le ThreadLocal permet d'attacher une variable au thread sans la partager, sinon les autres sont partagés...
Je pense peut-être avoir trouver la raison, mais je n'en suis pas sur !
Dans ce cas là, les attributs d'objet mct sont partagés entre les 2 threads.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MaClasseThread mct = new MaClasseThread(); Thread T1 = new Thread(mct); Thread T2 = new Thread(mct);
Par contre, si je fais ça:
Les attributs ne se partagent vu que c'est pas le même objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Thread T1 = new Thread(new MaClasseThread()); Thread T2 = new Thread(new MaClasseThread());
L'interêt d'un ThreadLocal est donc lors de l'exécution d'un même objet par plusieurs thread. Et dans ce cas, précis, les variables sont modifiables par les 2 threads. J'ajouterais que la variable en threadLocal se libère à la fin de la méthode run() de MaClasseThread.
Merci de votre apport à ma compréhension.
Fantomasmusic.
Partager