Esta clase proporciona una variable local de subproceso. 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 los subprocesos además de escribir clases inmutables.

  • Dado que el objeto ya no se comparte, no hay ningún requisito de sincronización que pueda mejorar la escalabilidad y el rendimiento de la aplicación.

  • Extiende la clase Object.

  • ThreadLocal proporciona una restricción de subprocesos que es una extensión de la variable local. ThreadLocal son visibles 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 clases y mantienen su estado dentro del hilo.

Constructor:
ThreadLocal (): Esto crea una variable local de subproceso.
Métodos:

  1. Objeto get (): Este método devuelve el valor en la copia del hilo actual de esta variable local del hilo. Si la variable no tiene valor para el hilo actual, primero se inicializa con el valor devuelto por una invocación del método initialValue ().

    Syntax: public Object get().
    Returns: the current thread's value of this thread-local.
    Exception: NA.
    
  2. conjunto vacío (valor del objeto): Este método establece la copia del hilo actual de esta variable local del hilo 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 thread-locals.

    Syntax: public void set(T value).
    Returns: NA.
    Exception: NA.
    

     

    public class ThreadLocalDemo {

     

    public static void main(String[] args)

        {

     

            ThreadLocal<Number> gfg_local = new ThreadLocal<Number>();

     

            ThreadLocal<String> gfg = new ThreadLocal<String>();

            

            gfg_local.set(100);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg_local.set(90);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg_local.set(88.45);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg.set("GeeksforGeeks");

     

            

            System.out.println("value = " + gfg.get());

        }

    }

    Producción:

    value = 100
    value = 90
    value = 88.45
    value = GeeksforGeeks
    
  3. anular eliminar (): Este método elimina el valor del hilo actual para esta variable local del hilo. Si esta variable local de subproceso es leída posteriormente por el subproceso actual, su valor se reinicializará invocando su método initialValue (), a menos que su valor sea establecido por el subproceso actual en el ínterin. Esto puede resultar en múltiples invocaciones del método initialValue en el hilo actual.

    Syntax: public void remove().
    Returns: NA.
    Exception: NA.
    

     

    public class ThreadLocalDemo {

     

    public static void main(String[] args)

        {

     

            ThreadLocal<Number> gfg_local = new ThreadLocal<Number>();

     

            ThreadLocal<String> gfg = new ThreadLocal<String>();

     

            

            gfg_local.set(100);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg_local.set(90);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg_local.set(88.45);

     

            

            System.out.println("value = " + gfg_local.get());

     

            

            gfg.set("GeeksforGeeks");

     

            

            System.out.println("value = " + gfg.get());

     

            

            gfg.remove();

     

            

            System.out.println("value = " + gfg.get());

     

            

            gfg_local.remove();

     

            

            System.out.println("value = " + gfg_local.get());

        }

    }

    Producción:

    value = 100
    value = 90
    value = 88.45
    value = GeeksforGeeks
    value = null
    value = null
    
  4. Objeto initialValue (): Este método devuelve el valor inicial del hilo actual para esta variable local del hilo.

    Syntax: protected Object initialValue()
    Returns: the initial value for this thread-local.
    Exception: NA.
    

    import java.lang.*;

    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(name);

        start();

    }

     

    public void run()

    {

        for (int i = 0; i < 2; i++)

            System.out.println(getName() + " " + gfg.get());

    }

    }

     

    public class ThreadLocalDemo {

     

    public static void main(String[] args)

        {

     

            NewThread t1 = new NewThread("quiz1");

            NewThread t2 = new NewThread("quiz2");

        }

    }

    Producción:

    quiz2 14
    quiz1 15
    quiz1 15
    quiz2 14
    

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

Deja una respuesta

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