ThreadLocal
Posted bee4j
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal相关的知识,希望对你有一定的参考价值。
- 引用类型
- 强引用StrongReference
- 最长使用
- 软引用SoftReference
- 在即将OOM之前,垃圾回收器会把这些软引用指向的对象加入回收范围
- 一般可用于同一台服务器内缓存低频访问的中间结果
- 弱引用WeakReference
- 下一次YGC时会被回收
- 虚引用PlantomReference
- 定义完成后,就无法通过该引用获取指向的对象
- 唯一目的是希望在垃圾回收时收到一个系统通知
- 几乎很难用到
- 强引用StrongReference
- 由于过度设计,成为故障高发点
- 内存泄露
- 脏数据
- 共享对象更新
- 每个线程都有一个独立的变量副本,其他线程不能访问
- 无法解决共享对象的更新问题
- 有什么作用?
- 传递线程内变量
- 通常用于同一个线程内,跨类、跨方法传递数据。如果没有他,势必要靠返回值和参数。
- 解决父子线程之间共享线程变量问题
- 使用ThreadLocal和InheritableThreadLocal
- 通过将Thread类构造方法的最后一个参数设置为true,可以把当前线程的变量继续往下传递给它创建的子线程。
- 淘宝使用这种方式透传全局上下文,如存储监控系统的某个标记位traceId,如果参数未设置为true,则子线程里获取的traceId为null
以上是关于ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章