ThreadLocal 图解
ThreadLocal是什么?
ThreadLocal 简称为线程局部变量
为什么称之为局部变量,是因为该变量依赖于当前所操作的线程,线程在它可在,线程完它必完!
一个线程可以拥有多个ThreadLocal变量,且各自生命周期各不相同
线程与线程之间的ThreadLocal互补干扰,互补影响,即A线程中的ThreadLocal与B线程中的ThreadLocal毫无关系,互不相识,因此在多线程环境下是安全的
ThreadLocal在使用完后必须进行remove,避免内存泄露
使用场景
-
接口耗时计算
通过拦截器, before 方法中 ThreadLocal.set(CurrentTime), after(currentTime-start);
-
日期格式化工具类使用
通过ThreadLocal封装的格式工具可保证其线程安全
private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();
源码解析
源码解析图:www.processon.com/view/link/5…
内存泄露
BUG 经历
- ThreadLocal ThreadLocal定义为静态时只能作为一种业务使用!!!同一线程中避免不要set多次。