ThreadLocal简介

简单介绍并演示了ThreadLocal用法

ThreadLocal简介

ThreadLocal并不是一个Thread,而是Thread的局部变量

ThreadLocal为每个线程提供一份单独的存储空间,具有线程隔离的效果,不同的线程之间不会相互干扰

应用场景:在同一个线程或同一个请求中,进行数据共享

ThreadLocal常用方法:

  • public void set(T value)设置当前线程的线程局部变量的值
  • public T get()返回当前线程所对应的线程局部变量的值
  • public void remove()移除当前线程的线程局部变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * ThreadLocalTest类演示了ThreadLocal的基本使用
 * ThreadLocal用于实现线程本地变量,每个线程都可以独立访问自己的变量副本
 */
public class ThreadLocalTest {

    // 创建一个ThreadLocal变量,用于存储String类型的线程本地变量
    private static ThreadLocal<String> local = new ThreadLocal<>();

    public static void main(String[] args) {
        // 在主线程中设置ThreadLocal的值为"Main……"
        local.set("Main……");
        // 创建并启动一个新线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 在子线程中设置ThreadLocal的值为"Sub……"
                local.set("Sub……");
                // 打印子线程名和ThreadLocal的值
                System.out.println(Thread.currentThread().getName() + ":" + local.get());
            }
        }).start();
        // 打印主线程名和ThreadLocal的值
        System.out.println(Thread.currentThread().getName() + ":" + local.get());
        // 移除主线程中的ThreadLocal变量
        local.remove();
        // 再次打印主线程名和ThreadLocal的值(应为null)
        System.out.println(Thread.currentThread().getName() + ":" + local.get());

    }
}

/**
 * 运行结果:
 * Thread-0:Sub……
 * main:Main……
 * main:null
 */
本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计