ThreadLocal 学习
一、是什么
java.lang.ThreadLocal<T>
根据 Java 8 Docs 的翻译,ThreadLocal 提供线程局部变量,每一个线程都有一个独立的变量副本。ThreadLocal 一般是一个类的 private static 字段。
二、ThreadLocal 原理
ThreadLocal 源码
1. set() 方法
1 | public void set(T value) { |
ThreadLocalMap 是 ThreadLocal 的静态内部类
1 | static class ThreadLocalMap { |
2. getMap() 方法
1 | /** |
3. get() 方法
1 | public T get() { |
4. remove() 方法
1 | public void remove() { |
总结
每个 Thread 维护着一个 ThreadLocalMap 的引用
ThreadLocalMap 是 ThreadLocal 的内部类,用 Entry 来进行存储
调用 ThreadLocal 的 set() 方法时,实际上就是往 ThreadLocalMap 设置值,key 是ThreadLocal 对象,值是传递进来的对象
调用 ThreadLocal 的 get() 方法时,实际上就是往 ThreadLocalMap 获取值,key 是ThreadLocal 对象
ThreadLocal 本身并不存储值,它只是作为一个 key 来让线程从 ThreadLocalMap 获取value。
- 本文作者: Kelly Liu
- 本文链接: http://tiantianliu2018.github.io/2020/03/17/ThreadLocal 学习/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!