Skip to content

ThreadLocal是Java中的一个类,用于在多线程环境下实现线程局部变量。它提供了一种简单的方式来保持每个线程独立地拥有自己的变量副本。

通常情况下,如果多个线程共享同一个变量,可能会导致并发访问的问题。而使用ThreadLocal可以为每个线程创建一个独立的变量副本,从而避免了线程之间的干扰和竞争条件。

你可以通过ThreadLocal的set()方法设置当前线程的变量值,通过get()方法获取当前线程的变量值。每个线程都只能访问到自己的变量副本,而不会影响其他线程的副本。

以下是一个示例代码,演示了如何使用ThreadLocal:

public class ThreadLocalExample {
    private static ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public static void main(String[] args) throws InterruptedException {
        // 设置主线程的变量值
        threadLocal.set("Main Thread Value");

        // 创建子线程并启动
        Thread childThread = new Thread(() -> {
            // 获取子线程的变量值
            String value = threadLocal.get();
            System.out.println("Child Thread Value: " + value);
        });
        childThread.start();

        // 等待子线程执行完毕
        childThread.join();

        // 获取主线程的变量值
        String value = threadLocal.get();
        System.out.println("Main Thread Value: " + value);
    }
}

输出结果为:

Child Thread Value: null
Main Thread Value: Main Thread Value

可以看到,子线程获取到的变量值为null,而主线程获取到的变量值为"Main Thread Value"。这说明每个线程都拥有自己独立的变量副本。