ThreadLocal如何使用详解

2024-01-10 00:42:19

ThreadLocal概述:

ThreadLocal是Java中的一个线程局部变量工具类,它提供了一种在多线程环境下,每个线程都可以独立访问自己的变量副本的机制。ThreadLocal中存储的数据对于每个线程来说都是独立的,互不干扰。

使用场景:
  • 在多线程环境下,需要保持线程安全性的数据访问。

  • 需要在多个方法之间共享数据,但又不希望使用传递参数的方式。

?基本用法:
1,创建ThreadLocal对象:

首先我们使用ThreadLocal对象来存储线程局部变量。可以使用ThreadLocal的默认构造函数创建一个新的实例。

ThreadLocal<String> threadLocal = new ThreadLocal();

?

2,设置线程局部变量:

使用set() 方法可以设置当前线程的局部变量的值。

 threadLocal.set("sde");
3,获取线程局部变量的值:

使用get()方法可以获取当前线程的局部变量的值。

        String s = threadLocal.get();
        System.out.println(s);

4,清除线程的局部变量的值:

使用remove()方法可以清除当前线程的局部变量的值。

  threadLocal.remove();

完整版:

?

    @Test
    void test(){

        ThreadLocal<String> threadLocal = new ThreadLocal();
        threadLocal.set("sde");
        String s = threadLocal.get();
        
        System.out.println(s);

        threadLocal.remove();

    }
}
示例代码:

下面是一个简单的示例代码,演示了如何使用ThreadLocal。

public class ThreadLocalTest {

    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
    public static void main(String[] args) {
        Thread t1 = new Thread(() ->{
            THREAD_LOCAL.set("sde666");
            getData("t1");
        },"t1");

        Thread t2 = new Thread(() ->{
            THREAD_LOCAL.set("sde888");
            getData("t2");
        },"t2");
        
        t1.start();
        t2.start();

    }

    private static void getData(String threadName){
        Object data = THREAD_LOCAL.get();
        System.out.println(threadName+"_"+data);
    }

}

文章来源:https://blog.csdn.net/weixin_64502989/article/details/135489018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。