ThreadLocal应用及原理分析
其实ThreadLocal早就有用过,原理也仅限于适用于多线程的同名变量,但其作用范围在单个线程内部,
但是面试时这样回答没有说服力,看看别人怎么说的,“当某些变量是以线程为作用域,并且不同线程有不同的值时,用ThreadLocal比较合适”。
一.用法
1.一般来说在类中声明
private static ThreadLocal<T> local = new ThreadLocal<T>();
2.在Runnable中不能声明为静态
private ThreadLocal<T> local = new ThreadLocal<T>();
3.设置和获取变量值
local.get();
local.set(T);
注意:在系统开发中,当前请求的用户信息一般来说都用ThreadLocal保存,但是会存在多个用户占用一个线程,
如果第二个用户信息为null的话,就会自用第一个用户的信息,为避免这种情况,在用户信息为null时,
local.set(null);
二.原理
因为适用于多线程,应该是作为一个static全局变量存在
static Map<ThreadId,Map<ThreadLocal,Object>>
ThreadId为线程ID,可以根据当前的线程ID获取当前线程的ThreadLocalMap.