Threadlocal用于在线程生命周期内传递数据。
使用ThreadLocal
解决多线程程序的并发问题,使用该工具写出简洁、优美的多线程程序…
ThreadLocal是什么:
ThreadLocal是线程本地的变量,只要是本线程内都可以使用,线程结束了,那么相应的线程本地变量也就跟随着线程消失了。
ThreadLocal和InheritableThreadLocal均是JDK1.2新增的API,在JDK5后支持到了泛型。它表示线程局部变量:为当前线程绑定一个变量,这样在线程的声明周期内的任何地方均可取出。
它仅有如下三个public方法:
public void set(T value) { ... }
public T get() { ... }
public void remove() { ... }
分别代表:
设置值:把value和当前线程绑定
获取值:获取和当前线程绑定的变量值
删除值:移除绑定关系
那么我们可以就此让ThreadLocal与jwtToken进行结合,在过滤器中解决越权问题
由于每个访问Threadlocal
变量的线程都有一个本地副本。它的key是一个弱引用。通常弱引用都会和引用队列配合清理机制使用,但是ThreadLocal是个例外,它并没有这么做。这意味着,废弃项目的回收依赖于显式地触发,否则就要等待线程结束,进而回收相应ThreadLocal每次使用过ThreadLocal后都要手动进行删除防止出现内存溢出的情况