美文网首页
servlet单例多线程的理解

servlet单例多线程的理解

作者: torres9gogogo | 来源:发表于2017-03-15 21:34 被阅读406次

    “当web服务启动或者是请求发送到服务器的时候 servlet被加载并且实例化(只有一个实例)”
    理解:
    (1)一个web项目(不同的业务请求)可以实例化多个servlet,多个用户线程请求,只实例化一个servlet.
    (2)servlet单实例多线程并发会有安全问题,成员对象变量线程不安全,局部变量线程安全(java对象分配至堆中线程共享,局部变量在方法栈中线程独享)。
    (3)servlet 单实例减少new实例的开销。
    (4)对多个请求通过分配线程池中已有的线程的方式减少响应时间。
    (5)每一个请求由servletrequest 封装接受,响应结果由servletresponse封装响应。即servletrequest servletresponse线程独享。

    Kobito.QPaJ7k.pngKobito.QPaJ7k.png

    servlet多线程机制同时处理多个请求

    servlet 单实例多线程基于java多线程机制,servlet整个生命周期由servlet 容器负责(加载 实例化 初始化),容器启动时候或者第一次访问的时候 容器根据 web.xml 的配置信息实例化一个servlet.新的客户端请求的时候一般不会再去实例化新的servlet(除非servlet实现 SingleThreadModel 接口).调度线程dispatcher thread从线程池中选出一个工作者线程worker thread,将请求传递给该工作者线程,然后由该线程来执行Servlet的service方法。当这个线程正在执行的时候,容器收到另外一个请求,调度线程同样从线程池中选出另一个工作者线程来服务新的请求

    相关文章

      网友评论

          本文标题:servlet单例多线程的理解

          本文链接:https://www.haomeiwen.com/subject/pzurnttx.html