从TL、ITL到TTL | 京东物流技术团队

💡 原文中文,约10100字,阅读约需24分钟。
📝

内容提要

ThreadLocal(TL)是Java中一种线程局部变量实现机制,为每个线程提供一个单独的变量副本,保证多线程场景下的线程安全。InheritableThreadLocal(ITL)是JDK提供的TL增强版,TransmittableThreadLocal(TTL)是阿里开源的ITL增强版。ITL解决了TL子线程遗传性的问题,通过将可遗传的ThreadLocal放在父线程新的ThreadLocalMap中,在子线程首次使用时进行拷贝。TTL在ITL上做了封装,通过封装线程池和任务,让子线程感知父线程的ThreadLocal变化。

🎯

关键要点

  • ThreadLocal(TL)是Java中一种线程局部变量实现机制,为每个线程提供单独的变量副本,保证线程安全。

  • InheritableThreadLocal(ITL)是JDK提供的TL增强版,解决了TL子线程遗传性的问题。

  • TransmittableThreadLocal(TTL)是阿里开源的ITL增强版,允许子线程感知父线程的ThreadLocal变化。

  • ThreadLocal的主要方法有initialValue、set、get、remove,首次访问时会初始化赋值。

  • ITL通过重写childValue、getMap、createMap方法,实现父线程的ThreadLocal值在子线程中的遗传。

  • 使用ITL时,子线程会拷贝父线程的ThreadLocal值,解决了TL不具备遗传性的问题。

  • TTL在ITL的基础上封装,通过任务提交时构建ThreadLocal副本,让子线程感知父线程的变化。

  • TTL的实现涉及到对线程池和任务的封装,确保子线程在执行任务时使用父线程的ThreadLocal副本。

  • TTL的性能损耗在官方测试中被认为是可忽略的。

➡️

继续阅读