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

Java Web开发
Java Web开发:UML的概念和模型
Java Web开发:Spring中的Web Context
Java Web开发:小编谈J2EE何存优势?
Java Web开发:Javaweb基础之Connection 接口浅析
Java Web开发:小编对新手学习jsp的六条建议建议
Java Web开发:小编谈如何成为一个优秀的jsp程序员
Java Web开发:小编谈J2EE 技术中的那些事
Java Web开发:小编浅谈J2EE技术
Java Web开发:小编浅谈JavaScript小技巧
Java Web开发:小编浅谈JavaScript小技巧(2)
Java Web开发:小编浅谈JavaScript小技巧(3)
Java Web开发:小编浅谈JavaScript小技巧(4)
Java Web开发:小编浅谈JavaScript小技巧(5)
Java Web开发:小编浅谈JavaScript小技巧(6)
Java Web开发:小编浅谈JavaScript小技巧(7)
Java Web开发:小编浅谈JavaScript小技巧(8)
Java Web开发:小编浅谈JavaScript小技巧(9)
Java Web开发:小编浅谈JavaScript小技巧(10)
Java Web开发:小编浅谈JavaScript小技巧(11)
Java Web开发:小编浅谈JavaScript小技巧(12)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 600 ::
收藏到网摘: 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>元素设置线程池中线程的数目