Esta clase proporciona variables locales de subprocesos. Estas variables difieren de sus contrapartes normales en que cada subproceso que accede a uno (a través de su método get o set) tiene su propia copia inicializada de forma independiente de la variable. Básicamente, es otra forma de lograr la seguridad de subprocesos además de escribir clases inmutables. Dado que el objeto ya no se comparte, no se requiere sincronización, lo que puede mejorar la escalabilidad y el rendimiento de la aplicación. ThreadLocal proporciona restricción de subprocesos, que es una extensión de una variable local. ThreadLocal es visible solo en un solo hilo. No hay dos subprocesos que puedan ver la variable local del subproceso del otro. Estas variables son generalmente campos estáticos privados en las clases y mantienen su estado dentro del hilo.
Nota: la clase ThreadLocal extiende la clase Object
Constructor: ThreadLocal() : Esto crea una variable local de hilo.
Métodos de la clase ThreadLocal
Método | Acción realizada |
---|---|
obtener() | Devuelve el valor en la copia del subproceso actual de esta variable local del subproceso. Si la variable no tiene valor para el subproceso actual, primero se inicializa con el valor devuelto por una invocación del método initialValue() |
valor inicial() | Devuelve el valor inicial del subproceso actual para la variable de subproceso local. |
retirar() | Elimina el valor del subproceso actual para esta variable local del subproceso. Si el subproceso actual lee posteriormente esta variable local de subproceso, su valor se reinicializará invocando su método initialValue(), a menos que el subproceso actual establezca su valor en el ínterin. Esto puede resultar en múltiples invocaciones del método initialValue en el subproceso actual |
establecer() | Establece la copia del subproceso actual de esta variable local del subproceso en el valor especificado. La mayoría de las subclases no tendrán necesidad de anular este método, confiando únicamente en el método initialValue() para establecer los valores de los subprocesos locales. |
Ejemplo 1:
Java
// Java Program to Illustrate ThreadLocal Class // Via get() and set() Method // Class // ThreadLocalDemo class GFG { // Main driver method public static void main(String[] args) { // Creating objects of ThreadLocal class ThreadLocal<Number> gfg_local = new ThreadLocal<Number>(); ThreadLocal<String> gfg = new ThreadLocal<String>(); // Now setting custom value gfg_local.set(100); // Returns the current thread's value System.out.println("value = " + gfg_local.get()); // Setting the value gfg_local.set(90); // Returns the current thread's value of System.out.println("value = " + gfg_local.get()); // Setting the value gfg_local.set(88.45); // Returns the current thread's value of System.out.println("value = " + gfg_local.get()); // Setting the value gfg.set("GeeksforGeeks"); // Returning the current thread's value of System.out.println("value = " + gfg.get()); } }
value = 100 value = 90 value = 88.45 value = GeeksforGeeks
Ejemplo 2:
Java
// Java Program to Illustrate ThreadLocal Class // Via Illustrating remove() Method // Class // ThreadLocalDemo public class GFG { // Main driver method public static void main(String[] args) { // Creating objects of ThreadLocal class ThreadLocal<Number> gfg_local = new ThreadLocal<Number>(); ThreadLocal<String> gfg = new ThreadLocal<String>(); // Setting the value gfg_local.set(100); // Returning the current thread's value System.out.println("value = " + gfg_local.get()); // Setting the value gfg_local.set(90); // Returns the current thread's value of System.out.println("value = " + gfg_local.get()); // Setting the value gfg_local.set(88.45); // Returning the current thread's value of System.out.println("value = " + gfg_local.get()); // Setting the value gfg.set("GeeksforGeeks"); // Returning the current thread's value of System.out.println("value = " + gfg.get()); // Removing value using remove() method gfg.remove(); // Returning the current thread's value of System.out.println("value = " + gfg.get()); // Removing vale gfg_local.remove(); // Returns the current thread's value of System.out.println("value = " + gfg_local.get()); } }
value = 100 value = 90 value = 88.45 value = GeeksforGeeks value = null value = null
Ejemplo 3:
Java
// Java Program to Illustrate ThreadLocal Class // Via initialValue() Method // Importing required classes import java.lang.*; // Class 1 // Helper class extending Thread class class NewThread extends Thread { private static ThreadLocal gfg = new ThreadLocal() { protected Object initialValue() { return new Integer(question--); } }; private static int question = 15; NewThread(String name) { // super keyword refers to parent class instance super(name); start(); } // Method // run() method for Thread public void run() { for (int i = 0; i < 2; i++) System.out.println(getName() + " " + gfg.get()); } } // Class 2 // Main class // ThreadLocalDemo public class GFG { // Main driver method public static void main(String[] args) { // Creating threads inside main() method NewThread t1 = new NewThread("quiz1"); NewThread t2 = new NewThread("quiz2"); } }
Producción:
Este artículo es una contribución de Abhishek Verma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA