慎用ThreadLocal

ThreadLocal的作用

1)保存在当前线程计算的中间结果

2)保存上下文信息,比如用户的身份等等

ThreadLocal的副作用

1) 信息泄露。 在服务器环境下(比如WebLogic), 线程往往被保存在线程池中。由于每个用户的请求(Request)都是通过一个线程来处理的,当线程处理完一个用户的请求之后,服务器应用程序会将该线程存放在线程池中。当下一个用户请求时,这个线程又被调度来处理请求。这种情况下,上一个用户的上下文信息(比如身份信息)将被得到。

2)内存泄露。

解决方法

当每个用户的请求处理完成之后,调用ThreaLocal.remove()方法将数据清除

参考:

http://dave.srednal.com/archives/14

原文地址:https://www.cnblogs.com/cando/p/2287805.html