ThreadLocal简介

ThreadLocal是什么?

ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

举例说明

import java.util.ArrayList;
import java.util.List;

public class ThreadLocalDemo {

    public static ThreadLocal> threadLocal = new ThreadLocal<>();

    public void setThreadLocal(List values) {
        threadLocal.set(values);
    }
    
    public void getThreadLocal() {
        System.out.println(Thread.currentThread().getName());
        threadLocal.get().forEach(name -> System.out.println(name));
    }
    
     public static void main(String[] args) throws InterruptedException {

            final ThreadLocalDemo threadLocal = new ThreadLocalDemo();
            new Thread(() -> {
                List params = new ArrayList<>(3);
                params.add("1");
                params.add("2");
                params.add("3");
                threadLocal.setThreadLocal(params);
                threadLocal.getThreadLocal();
            }).start();

            new Thread(() -> {
                try {
                    Thread.sleep(1000);
                    List params = new ArrayList<>(3);
                    params.add("A");
                    params.add("B");
                    params.add("C");
                    threadLocal.setThreadLocal(params);
                    threadLocal.getThreadLocal();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
}

运行后的情况:

ThreadLocal简介_第1张图片
程序运行情况

可以,看出虽然多个线程对同一个变量进行访问,但是由于threadLocal变量是ThreadLocal 类型,则不同的线程访问的就是该线程设置的值,这里也就体现出来ThreadLocal的作用。

当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

你可能感兴趣的:(ThreadLocal简介)