ThreadLocal 与 Request 和 Session 之关联
来源:互联网 发布:淘宝店铺改域名 编辑:程序博客网 时间:2024/06/18 08:54
转载:
最近看了robbin的《Web并发模型粗浅探讨V3.pptx》 介绍了当前各种技术关于并发处理的解决方案的优缺点,就我的角度实际上讲得是Request与进程、线程、纤程(具体是与那个需要看具体技术)之间的关系。一下子想起了前一阵子自己关于Request与Thread的关系问题,恰好在iteye里搜到一个人与我有同样的困惑 是否每一个Request都由一个不同的Thread来处理 看看评论好像没有给出详细的解释。
于是今天自己试验了一下,对该问题我自己的解释如下:
今天下午在我自己机子的Tomcat5.5.36下测试了一下,在Tomcat的默认配置下:一个Request对应一个Thread,但一个Thread一般会处理多个Request。
如何解释这个现象?我认为一般一个Request对象在JVM中的存活时间很短,几秒差不多了,很少有几十秒的情况。而web服务器中的线程对象在JVM中的存活时间很长,即便因为操作系统的调度会将该线程对象从running变成waiting,但目前各个商用服务器的策略是维护一个线程池,一段时间之后该线程对象还会变成waiting。
从物理时间上来说Thread生命周期远远大于Request。但从一个时间点上来看,假如一个Thread正在处理一个Request,那么该Thread不会同时还处理别的Request,即Request在Thread的生命周期内是一个一个串行执行的。
具体到ThreadLocal的使用情况来说:
我们一般使用ThreadLocal的模式是将该ThreadLocal对象作为一个类的静态变量(解决同一线程跨类跨方法访问的问题),先Set再Get,以两个Request与Thread的不同关系来说。假如这两个Request属于两个Thread则不存在问题,假如两个Request属于一个Thread,那么Request A在执行过程中先Set一个值,后再Get的是自己Set的值。Request B在执行过程中先Set一个值,此时Set的值将覆盖之前Request A已经Set的值(因为ThreadLocal的机制是在每一个线程内部以TheadLocal对象作为Key来存值,现在key没变,又塞了一个新值,所以会覆盖旧值),后Get的将是Request B的值。
- ThreadLocal 与 Request 和 Session 之关联
- ThreadLocal 与 Request 和 Session 之关联
- request和ThreadLocal
- Session管理之ThreadLocal
- 利用ThreadLocal管理request和session以及用户信息,实现 Use anywhere
- session与request
- request与session区别
- request.setAttribute()、session.setAttribute()和request.getParameter()、request.getAttribute()的联系与区别
- request 和 session
- request和session
- struts2 request和session
- request 和session
- session 和request 区别
- request和session区别
- ThreadLocal对request和response的使用
- ThreadLocal对request和response的使用
- session和 request 和model
- request和response和session
- 山东省第六届ACM省赛题——BIGZHUGOD and His Friends II(塞瓦定理,二分求解方程)
- CodeForce 651 A Joysticks
- GDSOI 2016 T1 互补约数
- view的setTag() 和 getTag()应用
- 关系型数据库和非关系型数据库
- ThreadLocal 与 Request 和 Session 之关联
- 打开Word提示向程序发送命令时出现问题怎么办?
- Leetcode no. 303
- 培训行业
- 动态存储分配及深复制 —我的数组类
- elastic资料整理
- 数据结构----完全二叉树和满二叉树以及前序、中序、后序遍历
- 使用ThinkPHP框架快速搭建网站(通俗易懂)
- Java 实现导出excel表 POI