ThreadLocal

Posted bee4j

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal相关的知识,希望对你有一定的参考价值。

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

以上是关于ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章

线程的补充

ThreadLocal

ThreadLocal

多线程之ThreadLocal

JDBC: ThreadLocal 类

关于ThreadLocal