【62、ThreadLocal实现原理及案例代码】

98 阅读1分钟

ThreadLocal 是一个 Java 中非常有用的工具类,可以为每个线程提供一个独立的变量副本,保证了线程安全。

ThreadLocal 实现原理:

每个 ThreadLocal 对象内部都有一个 Map,其中 key 为当前线程,value 为该线程的变量副本。在获取变量值时,ThreadLocal 首先获取当前线程,然后从 Map 中获取该线程的变量副本。

ThreadLocal 使用案例代码:

public class ThreadLocalTest {

    private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            threadLocal.set("value1");
            System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
            threadLocal.remove(); // 可以手动调用 remove() 方法来清除当前线程的变量副本
        });
        Thread thread2 = new Thread(() -> {
            threadLocal.set("value2");
            System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
            threadLocal.remove();
        });
        thread1.start();
        thread2.start();
    }
}

在上述代码中,我们创建了一个 ThreadLocal 对象,并在两个线程中分别设置不同的变量值。由于每个线程都有自己独立的变量副本,因此输出的结果会分别是 "value1" 和 "value2"。需要注意的是,使用完 ThreadLocal 后应该手动调用 remove() 方法来清除当前线程的变量副本,以避免内存泄漏。