ThreadLocal 用法总结
什么是ThreadLocal?
ThreadLocal 是一个特殊的类, 可以把其他变量装进这个类中, 使得 这个类可以在下面两个场景中使用:
线程隔离, 给每个线程都分配一个独立的对象, 避免多个线程之间对资源进行抢占
在每个线程或者类内都需要保存的 全局变量, 可以用 ThreadLocal, 避免传递参数
ThreadLocal 对象的初始化
ThreadLocal 变量有两种初始化方法:
在 ThreadLocal 对变量进行"装载"时重写 initialValue() 方法. 这种方法适合于上面说的第一个场景. 因为我们一开始就知道ThreadLocal 变量的初始值是什么(比如例子中的 SimpleDateFormat("yyyy-MM-dd hh:mm:ss") ), 我们只需要对他进行"复印"多几份.
调用 ThreadLocal 对象.set() 方法, 将变量"装载"进 ThreadLocal对象 里. 这种方法适用于上面所说的第二个场景. 因为我们并不清楚 ThreadLoca 变量需要初始化成怎样, 需要手动地进行赋值. 这个赋值可能需要其他类传进来, 可能需要在控制台输入.
ThreadLocal 对象的获取
想要获取 ThreadLocal 对象, 必须先对其进行初始化, 初始化以后调用 ThreadLocal.get() 获取 ThreadLocal 对象内部"装载"的对象.
ThreadLocal 与线程的关系
每一个线程都有一个ThreadLocalMap. 这个Map 和 HashMap 类似, 也是以一个个 Entry(也就是键值对) 的方式存在, 键为 ThreadLocal 对象, 值为 ThreadLocal 对象中"装载"的 对象.
ThreadLocal 的释放
ThreadLocal 对象不再使用后, 必须调用 ThreadLocal对象.remove() 方法对ThreadLocalMap中对应的 键值对进行删除.
Last updated