从TL、ITL到TTL | 京东物流技术团队
内容提要
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的性能损耗在官方测试中被认为是可忽略的。