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.

posted @ 2020-06-12 18:11  guoyinglin  阅读(174)  评论(0编辑  收藏  举报