ThreadLocal 与 web服务器

1.ThreadLocal即线程局部存储,当前线程只能访问到本线程中设置的变量

2.应用服务器收到一个用户请求后,总是分配一个独立的线程对该请求进行处理,考虑到频繁创建和销毁线程的开销太大,一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程,也就是说当某个请求被处理完后,相应线程并不会被销毁,而是被返回到线程池中以再次响应其它请求。即一个请求为一个线程。

3.如果用户信息存在session中我们可以把用户信息通过过滤器放到ThreadLocal中,这样在这个请求中就可以方便的取出用户信息了(脱离request,session等web对象的约束,还可在aop中获得当前用户)。但是这里有一个问题要注意,由于服务器采用的是线程池,请求结束后线程并没有销毁,下个请求可能会获得相同的线程(ThreadLocal中还保留上个用户的信息,若请求不经过filter,这会获取到上个用户信息导致错误),所以在filter中要在请求结束后删除用户信息,以保证用户信息不泄露。

finally {

//从ThreadLocal中清除用户信息
}


[size=large]参考:http://www.iteye.com/topic/156378[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值