Maison Java javaDidacticiel ThreadLocal résout des exemples de programmes multithread

ThreadLocal résout des exemples de programmes multithread

Jul 26, 2017 pm 04:52 PM
threadlocal 学习

Je pense que les lecteurs ont également lu beaucoup d'informations sur ThreadLocal sur Internet. De nombreux blogs ont dit ceci : ThreadLocal propose une nouvelle façon de penser pour résoudre le problème de concurrence. programmes multithreads. ;Le but de ThreadLocal est de résoudre le problème de partage lorsque plusieurs threads accèdent aux ressources. Si vous le pensez, donnez-vous 10 secondes pour dissiper vos précédents malentendus à propos de ThreadLocal !
Regardez comment le code source dans JDK est écrit :

This class provides thread-local variables. These variables differ from
their normal counterparts in that each thread that accesses one (via its
{@code get} or {@code set} method) has its own, independently initialized
copy of the variable. {@code ThreadLocal} instances are typically private
static fields in classes that wish to associate state with a thread (e.g.,
a user ID or Transaction ID).
Copier après la connexion

La traduction est probablement comme ceci (l'anglais n'est pas bon, si vous avez une meilleure traduction, veuillez laisser un message) :

La classe ThreadLocal est utilisée pour fournir des variables locales dans le thread. Lorsque ce type de variable est accessible dans un environnement multithread (accessible via la méthode get ou set), cela peut garantir que les variables de chaque thread sont relativement indépendantes des variables des autres threads. Les instances ThreadLocal sont généralement de type statique privé et sont utilisées pour associer des threads et des contextes de thread.

peut être résumé en une phrase : La fonction de ThreadLocal est de fournir des variables locales au sein du thread. Ce type de variable fonctionne dans le cycle de vie du thread, réduisant certaines variables communes entre plusieurs fonctions ou composants dans. le même fil conducteur. La complexité du transfert.
Par exemple, quand je sors, je dois d'abord prendre le bus, puis le métro. Ici, prendre le bus et prendre le métro sont comme deux fonctions dans le même fil. Je dois compléter les deux. fonctions. La même chose : carte de bus (les bus et métros de Pékin utilisent des cartes de bus), puis pour ne pas transmettre la variable de la carte de bus aux deux fonctions (équivalent à ne pas toujours avoir la carte de bus sur la route), je peux faire ceci : La carte de bus est remise à l'avance à une agence, et lorsque j'ai besoin de glisser la carte, je demande la carte de bus à cette agence (bien sûr, je reçois à chaque fois la même carte de bus). De cette façon, tant que j'ai (le même fil) besoin d'une carte de bus, je peux la demander à cette organisation à tout moment et n'importe où.

Quelqu'un veut dire : vous pouvez définir la carte de bus comme variable globale, afin de pouvoir obtenir la carte de bus à tout moment et n'importe où, n'est-ce pas ? Mais que se passe-t-il s’il y a de nombreux individus (de nombreux fils de discussion) ? Tout le monde ne peut pas tous utiliser la même carte de bus (on suppose que la carte de bus est authentifiée par son vrai nom), sinon ce sera chaotique. Comprenez-vous maintenant ? C'est l'intention initiale de la conception de ThreadLocal : fournir des variables locales au sein du thread, accessibles à tout moment et n'importe où dans ce thread, tout en isolant les autres threads.

(1) ThreadContext fournit une méthode pour lier et dissocier des objets pour le thread actuel en fonction de paires clé/valeur.

Cette classe fournit des variables locales de thread. Ces variables sont différentes des variables ordinaires dans la mesure où chaque thread accédant à un thread (via sa méthode get ou set) possède sa propre copie initialisée indépendamment de la variable.

Une instance ThreadLocal est généralement un champ statique privé dans une classe qui souhaite associer un état à un thread (par exemple : un utilisateur ID ou ID de transaction). Chaque fil a une référence implicite à une copie de la variable locale du fil,

Tant que le fil est vivant, l'instance ThreadLocal est accessible ; après la mort d'un thread, toutes les copies de l'instance locale du thread seront récupérées (sauf si d'autres références existent).

est l'objet enregistré dans le fil de discussion. Autrement dit, une classe T est un attribut de classe d'un thread.

Les méthodes couramment utilisées sont :

 1 public class ThreadLocal<T> { 2  3 //设置属性 4  5 public void set(T value) { 6 Thread t = Thread.currentThread(); 7 ThreadLocalMap map = getMap(t); 8 if (map != null) 9 map.set(this, value);10 else11 createMap(t, value);12 }13 14 //获取属性15 16 public T get() {17 Thread t = Thread.currentThread();18 ThreadLocalMap map = getMap(t);19 if (map != null) {20 ThreadLocalMap.Entry e = map.getEntry(this);21 if (e != null)22 return (T)e.value;23 }24 return setInitialValue();25 }26 27 //获取线程的 ThreadLocal.ThreadLocalMap28 29 ThreadLocalMap getMap(Thread t) {30 return t.threadLocals;31 }32 33 }34 35 //新建一个线程本地的localMap36 37 void createMap(Thread t, T firstValue) {38 t.threadLocals = new ThreadLocalMap(this, firstValue);39 }
Copier après la connexion

(2) Exemples d'utilisation : la connexion et la session sont les suivantes :

 1 private static ThreadLocal<Connection> connectionHolder 2 = new ThreadLocal<Connection>() { 3 public Connection initialValue() { 4     return DriverManager.getConnection(DB_URL); 5 } 6 }; 7   8 public static Connection getConnection() { 9 return connectionHolder.get();10 }
Copier après la connexion
 1 private static final ThreadLocal threadSession = new ThreadLocal(); 2   3 public static Session getSession() throws InfrastructureException { 4     Session s = (Session) threadSession.get(); 5     try { 6         if (s == null) { 7             s = getSessionFactory().openSession(); 8             threadSession.set(s); 9         }10     } catch (HibernateException ex) {11         throw new InfrastructureException(ex);12     }13     return s;14 }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1664
14
Tutoriel PHP
1267
29
Tutoriel C#
1239
24
Apprenez à désinstaller complètement pip et à utiliser Python plus efficacement Apprenez à désinstaller complètement pip et à utiliser Python plus efficacement Jan 16, 2024 am 09:01 AM

Plus besoin de pip ? Venez apprendre à désinstaller pip efficacement ! Introduction : pip est l'un des outils de gestion de packages Python, qui peut facilement installer, mettre à niveau et désinstaller les packages Python. Cependant, nous devrons parfois désinstaller pip, peut-être parce que nous souhaitons utiliser un autre outil de gestion de packages, ou parce que nous devons vider complètement l'environnement Python. Cet article explique comment désinstaller pip efficacement et fournit des exemples de code spécifiques. 1. Méthodes de désinstallation de pip Ce qui suit présente deux méthodes courantes de désinstallation de pip.

Une plongée approfondie dans la palette de couleurs de matplotlib Une plongée approfondie dans la palette de couleurs de matplotlib Jan 09, 2024 pm 03:51 PM

Pour en savoir plus sur la table de couleurs matplotlib, vous avez besoin d'exemples de code spécifiques 1. Introduction matplotlib est une puissante bibliothèque de dessins Python. Elle fournit un riche ensemble de fonctions et d'outils de dessin qui peuvent être utilisés pour créer différents types de graphiques. La palette de couleurs (colormap) est un concept important dans matplotlib, qui détermine la palette de couleurs du graphique. Une étude approfondie de la table des couleurs matplotlib nous aidera à mieux maîtriser les fonctions de dessin de matplotlib et à rendre les dessins plus pratiques.

Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Feb 19, 2024 pm 10:10 PM

Apprenez Pygame à partir de zéro : didacticiel complet d'installation et de configuration, exemples de code spécifiques requis Introduction : Pygame est une bibliothèque de développement de jeux open source développée à l'aide du langage de programmation Python. Elle fournit une multitude de fonctions et d'outils, permettant aux développeurs de créer facilement une variété de types. de jeu. Cet article vous aidera à apprendre Pygame à partir de zéro et fournira un didacticiel complet d'installation et de configuration, ainsi que des exemples de code spécifiques pour vous permettre de démarrer rapidement. Première partie : Installer Python et Pygame Tout d'abord, assurez-vous d'avoir

Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Feb 24, 2024 pm 11:21 PM

Le charme de l'apprentissage du langage C : libérer le potentiel des programmeurs Avec le développement continu de la technologie, la programmation informatique est devenue un domaine qui a beaucoup attiré l'attention. Parmi les nombreux langages de programmation, le langage C a toujours été apprécié des programmeurs. Sa simplicité, son efficacité et sa large application font de l’apprentissage du langage C la première étape pour de nombreuses personnes souhaitant entrer dans le domaine de la programmation. Cet article discutera du charme de l’apprentissage du langage C et de la manière de libérer le potentiel des programmeurs en apprenant le langage C. Tout d’abord, le charme de l’apprentissage du langage C réside dans sa simplicité. Comparé à d'autres langages de programmation, le langage C

Apprenons ensemble à saisir le numéro racine dans Word Apprenons ensemble à saisir le numéro racine dans Word Mar 19, 2024 pm 08:52 PM

Lors de la modification du contenu du texte dans Word, vous devez parfois saisir des symboles de formule. Certains gars ne savent pas comment saisir le numéro racine dans Word, alors Xiaomian m'a demandé de partager avec mes amis un tutoriel sur la façon de saisir le numéro racine dans Word. J'espère que cela aidera mes amis. Tout d'abord, ouvrez le logiciel Word sur votre ordinateur, puis ouvrez le fichier que vous souhaitez modifier et déplacez le curseur vers l'emplacement où vous devez insérer le signe racine, reportez-vous à l'exemple d'image ci-dessous. 2. Sélectionnez [Insérer], puis sélectionnez [Formule] dans le symbole. Comme indiqué dans le cercle rouge dans l'image ci-dessous : 3. Sélectionnez ensuite [Insérer une nouvelle formule] ci-dessous. Comme indiqué dans le cercle rouge dans l'image ci-dessous : 4. Sélectionnez [Formule radicale], puis sélectionnez le signe racine approprié. Comme le montre le cercle rouge sur l'image ci-dessous :

Apprenez la fonction principale du langage Go à partir de zéro Apprenez la fonction principale du langage Go à partir de zéro Mar 27, 2024 pm 05:03 PM

Titre : Apprenez la fonction principale du langage Go à partir de zéro. En tant que langage de programmation simple et efficace, le langage Go est privilégié par les développeurs. Dans le langage Go, la fonction principale est une fonction d'entrée, et chaque programme Go doit contenir la fonction principale comme point d'entrée du programme. Cet article explique comment apprendre la fonction principale du langage Go à partir de zéro et fournit des exemples de code spécifiques. 1. Tout d’abord, nous devons installer l’environnement de développement du langage Go. Vous pouvez aller sur le site officiel (https://golang.org

Apprenez la fonction strconv.Atoi dans la documentation du langage Go pour convertir des chaînes en entiers Apprenez la fonction strconv.Atoi dans la documentation du langage Go pour convertir des chaînes en entiers Nov 03, 2023 am 08:55 AM

Apprenez la fonction strconv.Atoi dans la documentation du langage Go pour convertir des chaînes en entiers. Le langage Go est un langage de programmation puissant et flexible dans sa bibliothèque standard qui fournit la fonction de conversion de chaînes. Dans cet article, nous apprendrons comment convertir une chaîne en entier à l'aide de la fonction strconv.Atoi. Tout d’abord, nous devons comprendre le but et la déclaration de la fonction strconv.Atoi. La description de la fonction dans le document est la suivante : funcAtoi(sstring)(i

Apprenez rapidement l'installation de pip et maîtrisez les compétences à partir de zéro Apprenez rapidement l'installation de pip et maîtrisez les compétences à partir de zéro Jan 16, 2024 am 10:30 AM

Apprenez l'installation de pip à partir de zéro et maîtrisez rapidement les compétences. Des exemples de code spécifiques sont nécessaires. Présentation : pip est un outil de gestion de packages Python qui peut facilement installer, mettre à niveau et gérer les packages Python. Pour les développeurs Python, il est très important de maîtriser les compétences d'utilisation de pip. Cet article présentera la méthode d'installation de pip à partir de zéro et donnera quelques conseils pratiques et exemples de code spécifiques pour aider les lecteurs à maîtriser rapidement l'utilisation de pip. 1. Installer pip Avant d'utiliser pip, vous devez d'abord installer pip. pépin

See all articles