ThreadLocal:线程中的全局变量 | 京东云技术团队

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

使用ThreadLocal传递全局变量,每个线程访问到的值不同,避免重复创建实例副本。使用完后调用ThreadLocal.remove()避免内存泄漏,设置key为弱引用预防内存泄漏。

🎯

关键要点

  • 新增业务场景需要在接口中增加字段,导致多个类和方法逻辑改变。
  • 使用ThreadLocal可以在每个线程中传递全局变量,避免重复创建实例副本。
  • ThreadLocal的变量是线程本地的,每个线程访问的值不同,避免多线程间共享问题。
  • ThreadLocal变量通常被private static修饰,以便在线程结束时回收实例副本,避免内存泄漏。
  • ThreadLocal的内部实现是每个线程都有自己的ThreadLocalMap,解决了多线程并发问题。
  • 使用ThreadLocal时需要在通用类中定义变量和初始化函数。
  • ThreadLocal可能导致内存泄漏,尤其是当ThreadLocal实例不是静态变量时。
  • ThreadLocalMap中的key是弱引用,能预防大多数内存泄漏情况。
  • 使用完ThreadLocal后,必须调用ThreadLocal.remove()以避免内存泄漏。
➡️

继续阅读