码迷,mamicode.com
首页 > 编程语言 > 详细

线程池 与 ThreadLocal

时间:2015-06-15 00:09:59      阅读:502      评论:0      收藏:0      [点我收藏+]

标签:

今天在hhoj中改了一点代码。

之前应用中用ThreadLocal来保存该线程对应的用户UserinfoModel。在线程激活时从Usersession中获取然后放进ThreadLocal中。

今天想改成只在Session中保存用户名。线程激活时根据从数据库中获取最新的UserinfoModel。

于是问题就来了。

首先是,如果用户名为空,没有清空ThreadLocal。

导致的问题是,在未登录状态下,如果反复刷新,从线程池中复用了之前的线程,

那么之前的ThreadLocal中的UserinfoModel会被串到这个会话中,然后保存下来。

造成未登录状态下的用户刷新几次页面就变成登录状态了。。。

(╯°□°)╯︵ ┻━┻。。而第一个登录的往往都是管理员(也就是我)。。

而这个串线是会传染的。一个会话本次意外获得了一个Model会被写入其Session保存下来,

下一次遇到一个新的线程,又传染给下一个线程。

于是很快所有的线程里都有一个管理员的UserinfoModel。。。T.T....

 

在线程池有关的操作中,如果使用了ThreadLocal,或者其他以线程为key的结构,每次激活新线程,必须清空所有的ThreadLocal。。。

在线程池有关的操作中,如果使用了ThreadLocal,或者其他以线程为key的结构,每次激活新线程,必须清空所有的ThreadLocal。。。

在线程池有关的操作中,如果使用了ThreadLocal,或者其他以线程为key的结构,每次激活新线程,必须清空所有的ThreadLocal。。。

重要的事情说三遍。。。

 

线程池 与 ThreadLocal

标签:

原文地址:http://www.cnblogs.com/qinhang3/p/4575876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!