ThreadLocal

时间:2021-07-12
本文章向大家介绍ThreadLocal,主要包括ThreadLocal使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

什么是ThreadLocal?

1.从源码开始了解ThreadLocal

首先进入Thread类

(ctrl+f)搜索会发现Thread类中存在这样一个变量,这个变量可以提供给我们在当前线程中储存一些东西,这就是ThreadLocal的核心。

ThreadLocal.ThreadLocalMap threadLocals = null;
现在我们移步到ThreadLocal类中

找到getMap(Thread t)这个方法,这个方法是获取当前线程的ThreadLocalMap threadLocals变量,threadLocals就是上面提到的Thread类中的变量

set(T value)方法
首先获取到当前线程,通过getMap方法获取当前线程的ThreadLocalMap threadLocals变量,再以ThreadLocal对象作为key保存value在当前线程的ThreadLocalMap threadLocals中


get()同理从当前线程ThreadLocalMap threadLocals变量中获取一个key为ThreadLocal对象的value

栗子:

    public static void main(String[] args) {
        ThreadLocal<String> tl1 = new ThreadLocal<>();
        ThreadLocal<String> tl2 = new ThreadLocal<>();
		//创建一个线程 testThread
        Thread testThread = new Thread(() -> {
		//保存两个值到线程中
            tl1.set("value1");
		//通过ThreadLocal向testThread线程中的ThreadLocalMap threadLocals变量中set(tl1Object,"value1")
            tl2.set("value2");
   		//通过ThreadLocal向testThread线程中的ThreadLocalMap threadLocals变量中set(tl2Object,"value2")
			
		//通过ThreadLocal从当前线程中ThreadLocalMap threadLocals变量中获取刚刚存储的两个值
            System.err.println(tl1.get());
            System.err.println(tl2.get());
        });
        testThread.start();
    }
    }

原文地址:https://www.cnblogs.com/Zhusi/p/15004329.html