当前位置: 首页 > 图文教程 > Java技术 > Java Web开发 > Java web:孙鑫老师谈Servlet的线程模型

Java Web开发
Java Web开发:小编浅谈JavaScript小技巧(13)
小编浅谈JavaScript小技巧(14)
FreeMarker指令那些事
浅谈Struts实现文件的下载
Jsp基础那些事
浅谈Hibernate中实现ORM
整理Jsp生成html文件
浅谈Java Reflection(Java反射)(1)
浅谈Java Reflection(Java反射)(2)
浅谈网络协议中Socket类
用POI来读取/写入完整的Excel文件(一)
用POI来读取/写入完整的Excel文件(二)
浅谈JDBC事务和JTA (XA)事务
浅谈Java网络编程之Socket (1)
浅谈Java网络编程之Socket (2)

Java Web开发 中的 Java web:孙鑫老师谈Servlet的线程模型


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 602 ::
收藏到网摘: n/a

Servlet规范定义,在默认情况下(Servlet不是在分布式的环境中部署),Servlet容器对声明的每一个Servlet,只创建一个实例。如果有多个客户请求同时访问这个ServletServlet容器如何处理这多个请求呢?答案是采用多线程,Servlet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程,这些线程叫做工作者线程(Worker Thread)。Servlet容器使用一个调度者线程(Dispatcher Thread)来管理工作者线程。当容器接收到一个访问Servlet的请求,调度者线程从线程池中选取一个工作者线程,将请求传递给该线程,然后由这个线程执行Servletservice()方法,如图7-1所示。

                                                                                            

                                                                                                          

                    图7-1  调度者线程选取一个工作者线程来服务请求

  当这个线程正在执行的时候,容器收到了另外一个请求,调度者线程将从池中选取另一个线程来服务新的请求。要注意的是,Servlet容器并不关心这第二个请求是访问同一个Servlet还是另一个Servlet。因此,如果容器同时收到访问同一个Servlet的多个请求,那么这个Servletservice()方法将在多个线程中并发地执行。图7-2显示了两个工作者线程都在执行同一个Servletservice()方法。

               

                                                                                         

                                                                                          

                图7-2  两个工作者线程同时执行一个Servletservice()方法

由于Servlet容器采用了单实例多线程的方式(这是Servlet容器默认的行为),最大限度地减少了产生Servlet实例的开销,显著地提升了对请求的响应时间。对于Tomcat,可以在server.xml文件中通过<Connnector>元素设置线程池中线程的数目