Request和ThreadLocal

Web容器中有三个周期 request/Httpsession/application
其中request是客户端发出的一个请求,这个request的载体就是一个 线程,实际等同于一个线程的生命周期。

Request是封装在线程上面一个抽象概念。

而ThreadLocal则相当于 多个线程的一个共享全局变量存储地,它里面保存的是和每个线程相关的状态。所以threadLocal是为线程服务的,和线程处于一个底层位置。

当一个线程或request结束时,threadlocal中的状态就没有了,所以threadLocal基本 类似request.setAttribute作用,threadLocal中的对象状态的生命周期等同于request.

 

使用ThreadLocal可以大量减少参数的传递,可以 使代码简洁,但是一定要明白,一个线程会绑定多个自己定义的局部对象,ThreadLocal是抽象在线程上的对象创建工厂,目前的Tomcat5使用了 线程池,一个线程处理一个request,这样ThreadLocal对象可以抽象的绑定在request生命周期,不会存在线程危机,而且线程池也平衡 了这些ThreadLocal对象的消耗,但是tomcat 6使用nio技术,一个线程可能会处理多个request,提高处理访问能力的情况下,ThreadLocal的使用将会出现问题,对象不再服务于一个 request,所以ThreadLocal的长期使用需要注意

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值