ThreadLocal源码分析-黄金分割数的使用 (4)

简单来说,ThreadLocalMap是ThreadLocal真正的数据存储容器,实际上ThreadLocal数据操作的复杂部分的所有逻辑都在ThreadLocalMap中进行,而ThreadLocalMap实例是Thread的成员变量,在ThreadLocal#set()方法首次调用的时候设置到当前执行的线程实例中。如果在同一个线程中使用多个ThreadLocal实例,实际上,每个ThreadLocal实例对应的是ThreadLocalMap的哈希表中的一个哈希槽。举个例子,在主函数主线程中使用多个ThreadLocal实例:

public class ThreadLocalMain { private static final ThreadLocal<Integer> TL_1 = new ThreadLocal<>(); private static final ThreadLocal<String> TL_2 = new ThreadLocal<>(); private static final ThreadLocal<Long> TL_3 = new ThreadLocal<>(); public static void main(String[] args) throws Exception { TL_1.set(1); TL_2.set("1"); TL_3.set(1L); Field field = Thread.class.getDeclaredField("threadLocals"); field.setAccessible(true); Object o = field.get(Thread.currentThread()); System.out.println(o); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdgj.html