代码改变世界

慎用ThreadLocal

2011-12-14 17:05  康杜  阅读(797)  评论(0编辑  收藏  举报

ThreadLocal的作用

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

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

 

ThreadLocal的副作用

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

 

2)内存泄露。

 

 

解决方法

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

 

参考:

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