图解ThreadLocal

1,727 阅读1分钟

ThreadLocal 图解

ThreadLocal是什么?

ThreadLocal 简称为线程局部变量

为什么称之为局部变量,是因为该变量依赖于当前所操作的线程,线程在它可在,线程完它必完!

一个线程可以拥有多个ThreadLocal变量,且各自生命周期各不相同

线程与线程之间的ThreadLocal互补干扰,互补影响,即A线程中的ThreadLocal与B线程中的ThreadLocal毫无关系,互不相识,因此在多线程环境下是安全的

ThreadLocal在使用完后必须进行remove,避免内存泄露

使用场景

  1. 接口耗时计算

    通过拦截器, before 方法中 ThreadLocal.set(CurrentTime), after(currentTime-start);

  2. 日期格式化工具类使用

    通过ThreadLocal封装的格式工具可保证其线程安全

    private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();
    

    使用场景图

源码解析

源码解析图

源码解析图:www.processon.com/view/link/5…

内存泄露

内存泄露图

BUG 经历

  • ThreadLocal ThreadLocal定义为静态时只能作为一种业务使用!!!同一线程中避免不要set多次。