Maison  >  Article  >  Java  >  Java ThreadLocal

Java ThreadLocal

WBOY
WBOYoriginal
2024-08-30 16:03:25538parcourir

Les variables qui peuvent être lues et écrites par le même thread peuvent être créées en utilisant une classe appelée classe ThreadLocal en Java, et donc si le même code est exécuté par les deux threads et que le code fait référence aux variables du même ThreadLocal, les deux threads ne peuvent pas voir ces variables de ThreadLocal et donc un code peut être rendu thread-safe par l'utilisation de la classe ThreadLocal et le code ne serait pas thread-safe sans l'utilisation de la classe ThreadLocal et d'une instance de la classe ThreadLocal. peut être créé comme créer l'instance de n'importe quelle autre classe en Java en utilisant l'opérateur new.

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Comment fonctionne la classe ThreadLocal en Java ?

La variable thread-local est fournie par la classe java.lang.ThreadLocal en Java. Ces variables sont différentes des variables normales de sorte qu'elles sont accessibles à l'aide de la méthode get ou set par chaque thread indépendant, propre et possédant une copie de la variable, qui est initialisée. C'est fondamentalement l'un des autres moyens d'assurer la sécurité du fil en dehors de l'écriture de classes immuables.

Il n'y a plus de partage de l'objet, et donc aucune nécessité de synchronisation grâce à laquelle les performances et l'évolutivité de l'application sont améliorées. La classe ThreadLocal en Java étend l'objet de classe. L'extension de la variable locale, qui est une restriction du thread, est fournie par la classe ThreadLocal en Java. Un seul thread peut afficher le ThreadLocal. Les threads des uns et des autres ne peuvent pas voir les variables ThreadLocal de deux threads. Les variables ThreadLocal appartiennent au champ privé, qui est statique dans les classes, et l'état est maintenu à l'intérieur du thread.

Création de ThreadLocal en Java

L'instance de ThreadLocal est créée de la même manière qu'une instance de tout autre objet Java est créée à l'aide d'un nouvel opérateur. Considérez la syntaxe ci-dessous pour créer un ThreadLocal en Java :

private ThreadLocal variable_name = new ThreadLocal();

La création de ThreadLocal ne doit être effectuée qu'une seule fois pour un thread. Les valeurs peuvent être définies puis obtenues par plusieurs threads à l'intérieur de ce ThreadLocal, et seules les valeurs définies par le thread peuvent être vues par elles-mêmes.

Obtenir la valeur ThreadLocal en Java

La valeur stockée dans ThreadLocal peut être lue à l'aide de sa méthode get(). Considérez la syntaxe ci-dessous pour obtenir une valeur ThreadLocal en Java :

String variable_name = (String) threadLocal.get();

Définir la valeur ThreadLocal en Java

La valeur à stocker dans ThreadLocal après sa création peut être définie à l'aide de la méthode set(). Considérez la syntaxe ci-dessous pour définir une valeur ThreadLocal en Java :

threadLocal.set("value_that_needs_to_be_set");

Supprimez la valeur ThreadLocal en Java.

La valeur définie dans ThreadLocal après sa création peut être supprimée. La valeur ThreadLocal peut être supprimée à l’aide de la méthode ThreadLocal Remove(). Considérez la syntaxe ci-dessous pour supprimer une valeur ThreadLocal définie en Java :

threadLocal.remove();

Exemples d'implémentation de Java ThreadLocal

Vous trouverez ci-dessous des exemples mentionnés :

Exemple n°1

Programme pour démontrer la méthode get() et la méthode set() de la classe ThreadLocal :

Code :

//a class called demo is defined
public class Demo
{
//main method is called
public static void main(String[] args)
{
//an instance of the ThreadLocal is created for a number
ThreadLocal<Number> local = new ThreadLocal<Number>();
//an instance of the ThreadLocal is created for a string
ThreadLocal<String> val = new ThreadLocal<String>();
//setting the first number value using set() method
local.set(100);
//obtaining the current thread's value which returns a number using get() method
System.out.println("The number value that was set is = " + local.get());
//setting the second number value using set() method
local.set(90);
//obtaining the current thread's value which returns a numberusing get() method
System.out.println("The number value that was set is = " + local.get());
//setting the first string value using set() method
val.set("Welcome to ThreadLocal");
//obtaining the current thread's value which returns a stringusing get() method
System.out.println("The string value that was set is = " + val.get());
//setting the second string value using set() method
val.set("Learning is fun");
//obtaining the current thread's value which returns a stringusing get() method
System.out.println("The string value that was set is = " + val.get());
}
}

Sortie :

Java ThreadLocal

Explication : Dans le programme ci-dessus, une classe appelée démo est définie. Ensuite, la méthode principale est définie. Ensuite, une instance de ThreadLocal est créée pour un nombre. Ensuite, une instance de ThreadLocal est créée pour une chaîne. Ensuite, la première valeur numérique est définie à l’aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie un nombre est obtenue à l'aide de la méthode get(). Ensuite, la deuxième valeur numérique est définie à l'aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie un nombre est obtenue à l'aide de la méthode get(). Ensuite, la première valeur de chaîne est définie à l’aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie une chaîne est obtenue à l'aide de la méthode get(). Ensuite, la deuxième valeur de chaîne est définie à l’aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie une chaîne est obtenue à l'aide de la méthode get(). La sortie du programme est affichée dans l'instantané ci-dessus.

Exemple n°2

Programme Java pour démontrer la méthode Remove() de la classe ThreadLocal :

Code :

//a class called demo is defined
public class Demo
{
//main method is called
public static void main(String[] args)
{
//an instance of the ThreadLocal is created for a number
ThreadLocal<Number> local = new ThreadLocal<Number>();
//an instance of the ThreadLocal is created for a string
ThreadLocal<String> val = new ThreadLocal<String>();
//setting the first number value using set() method
local.set(100);
//obtaining the current thread's value which returns a number using get() method
System.out.println("The first number value that was set is = " + local.get());
//setting the second number value using set() method
local.set(90);
//obtaining the current thread's value which returns a number using get() method
System.out.println("The second number value that was set is = " + local.get());
//setting the first string value using set() method
val.set("Welcome to ThreadLocal");
//obtaining the current thread's value which returns a string using get() method
System.out.println("The first string value that was set is = " + val.get());
//Using remove() method to remove the first string value that was set using set() method
val.remove();
//obtaining the current thread's value which returns a string using get() method
System.out.println("The first string value after using remove() method is = " + val.get());
//Using remove() method to remove the first number value and second number value that was set using set() method
local.remove();
//obtaining the current thread's value using get() method
System.out.println("The first number value and second number value after using remove() method is = " + local.get());
}
}

Sortie :

Java ThreadLocal

Explication : Dans le programme ci-dessus, une classe appelée démo est définie. Ensuite, la méthode principale est définie. Ensuite, une instance de ThreadLocal est créée pour un nombre. Ensuite, une instance de ThreadLocal est créée pour une chaîne. Ensuite, la première valeur numérique est définie à l’aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie un nombre est obtenue à l'aide de la méthode get(). Ensuite, la deuxième valeur numérique est définie à l'aide de la méthode set(). Ensuite, la valeur du thread actuel qui renvoie un nombre est obtenue à l'aide de la méthode get(). Ensuite, la première valeur de chaîne est définie à l'aide de la méthode set().

Ensuite, la méthode Remove() est utilisée pour supprimer la première valeur de chaîne définie à l'aide de la méthode set(). Ensuite, la valeur du thread actuel est obtenue à l'aide de la méthode get() et elle renvoie null car nous avons supprimé la valeur définie à l'aide de la méthode Remove(). Ensuite, la méthode Remove() est utilisée pour supprimer la première valeur numérique et la deuxième valeur numérique définies à l'aide de la méthode set(). Ensuite, la valeur du thread actuel est obtenue à l'aide de la méthode get() et renvoie null car nous avons supprimé les valeurs définies à l'aide de la méthode Remove(). La sortie du programme est affichée dans l'instantané ci-dessus.

Avantages de la classe ThreadLocal en Java

  • La classe ThreadLocal facilite la tâche de multi-threading car l'état de l'objet n'est pas partagé entre les threads.
  • Il n'y a pas besoin de synchronisation puisque l'état de l'objet n'est pas partagé entre les threads.
  • ThreadLocal évite l'exposition d'un objet à plusieurs threads.

Conclusion

Dans ce tutoriel, nous comprenons le concept de la classe ThreadLocal à travers la définition, le fonctionnement de la classe ThreadLocal et leurs méthodes à travers des exemples de programmation et leurs sorties.

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:
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
Article précédent:Pool de threads JavaArticle suivant:Pool de threads Java