ThreadLocal简介

作者: 5e30faa7d323 | 来源:发表于2017-11-28 10:52 被阅读26次

ThreadLocal是什么?

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

举例说明

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

public class ThreadLocalDemo {

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

    public void setThreadLocal(List<String> 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<String> 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<String> 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变量是ThreadLocal 类型,则不同的线程访问的就是该线程设置的值,这里也就体现出来ThreadLocal的作用。

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

相关文章

网友评论

    本文标题:ThreadLocal简介

    本文链接:https://www.haomeiwen.com/subject/lhssbxtx.html