zoukankan      html  css  js  c++  java
  • tomcat源码阅读之SingleThreadModel

    一、接口简介:

    实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet实例,即为每个用户创建一个实例,这将导致严重的性能问题。

    实现了SingleThreadModel接口的servlet并不能保证是线程安全的,该接口并不能防止servlet访问共享资源造成的同步问题。

    在servlet 2.4规范中,singleThreadModel接口已经弃用了,因为他会让程序员误以为实现了该接口的servlet是多线程安全的。

    二、源码分析:

    源码分析主要分析StandardWrapper.java文件;

    实现了singleThreadModel接口的servlet,在生成实例时,会将生成的实例保存到一个instancePool的栈中:

     

    在StandardWrapper.allocate中,判断如果没有实现singleThreadModel接口,则生成servlet实例并返回该实例,如果实现了singleThreadModel接口,则将生成的实例压入栈instancePool中:

     

    在unLoad中会循环将instancePool中保存的servlet实例全部释放:

     

  • 相关阅读:
    Django框架简介
    Django初识
    web前端 html
    python基础概念
    线程
    进程线程区别,和线程初识
    Nginx配置多个服务共用80端口
    Supervisor重新加载配置
    Gunicorn-Django部署
    django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")
  • 原文地址:https://www.cnblogs.com/laoxia/p/7994035.html
Copyright © 2011-2022 走看看