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的长期使用需要注意

你可能感兴趣的:(Request和ThreadLocal)