TheadLocal
线程封闭
对象封闭在一个线程里,即使这个对象不是线程安全的,也不会出现并发安全问题。
ThreadLocal线程封闭:简单易用
使用ThreadLocal来实现线程封闭,线程封闭的指导思想是封闭,而不是共享。所以说ThreadLocal是用来解决变量共享的并发安全问题,是不精确的。
概述
ThreadLocal叫做线程变量,在ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
原理分析
ThreadLocal是一个泛型类,保证可以接受任何类型的对象。
因为一个线程内可以存在多个ThreadLocal对象,所以其实是ThreadLocal内部维护了一个Map,这个Map不是直接使用的HashMap,而是ThreadLocal实现的一个叫做ThreadLocalMap的静态内部类。而我们使用的get()、set()方法其实都是调用了这个ThreadLocalMap类对应的get()、set()方法。
createMap方法
ThreadLocalMap是个静态的内部类