ThreadLocal的原理
-
每一个thread对象均含有一个ThreadLocalMap类型的成员变量threadLocals,它存储本线程中所有
ThreadLocal对象及其对应的值 -
ThreadLocalMap 由一个个Entry对象构成
-
Entry继承自WeakReference<ThreadLocal<?>>,一个Entry由ThreadLocal对象和Object构成。由此可见,Entry的key是ThreadLocal对象,并且是一个弱引用。当没指向key的强引用后,该key就会被垃圾收集器回收
-
当执行set方法时,ThreadLocal首先会获取当前线程对象,然后获取当前线程的ThreadLocalMap对象。再以当前ThreadLocal对象为key,将值存储进ThreadLocalMap对象中。
-
get方法执行过程类似。ThreadLocal首先会获取当前线程对象,然后获取当前线程的ThreadLocalMap对象。再以当前ThreadLocal对象为key,获取对应的value。
-
由于每一条线程均含有各自私有的ThreadLocalMap容器,这些容器相互独立互不影响,因此不会存在线程安全性问题,从而也无需使用同步机制来保证多条线程访问容器的互斥性。
使用场景
-
在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。
-
线程间数据隔离
-
进行事务操作,用于存储线程事务信息。文章来源:https://www.toymoban.com/news/detail-575594.html
-
数据库连接文章来源地址https://www.toymoban.com/news/detail-575594.html
到了这里,关于22、ThreadLocal的原理和使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!