关于一个用户发送多次请求和tomcat的线程关系

tomcat默认使用线程池来管理线程,即当收到一个请求时,如果线程池存在空闲线程,则会从中取出一个空闲线程来处理该请求。当一个线程在处理请求时,其他请求就不会被分配至该线程。

例如有a,b,c三个空闲线程:
1、当request1到来时,分配a线程来处理
2、同时有request2到来,此时a线程在处理中,因此只有bc两个空闲线程,则会从中选一个处理request2。
3、request1处理完成,request3来了,则就可能分配给空闲线程a来处理。

问题来了,如果项目中使用了ThreadLocal,则在步骤1中会存入a线程对应的数据,步骤2中会存入b线程对应的数据,二者互不干扰。当到步骤3时,由于复用了线程a,因此request3这个请求处理过程中,可以直接通过ThreadLocal取到步骤1中放入的数据。

因此,在写代码时,注意在请求处理结束之前,把ThreadLocal中存入的数据清空,防止后续线程复用时造成干扰。

上案列(黑马点评):

在MvcConfig中配置了两个拦截器类

一个负责拦截一切路径 ,一个负责拦截需要登陆的路径。

通过设置order属性,让我们拦截一切路径的拦截器先执行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值