Clase Java.lang.ThreadLocal en Java

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());
    }
}
Producción

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());
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *