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实例全部释放:

tomcat源码阅读之SingleThreadModel的更多相关文章
- Tomcat源码阅读(二)初始化
近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...
- tomcat源码阅读
1 工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2 下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
- tomcat源码阅读之载入器(Loader)
一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...
- tomcat源码阅读之BackupManager
一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...
- tomcat源码阅读之安全机制
一.领域(Realm): 1.Principal接口代表角色信息,包含了三个成员:用户名.密码.role列表(以逗号分隔),对应了tomcat-users.xml文件中一行user信息: Generi ...
- tomcat源码阅读之集群
一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...
- tomcat源码阅读之默认连接器
默认连接器 一.UML图: 1.所有的连接器都要实现Connector接口,必须创建Request对象和Response对象,httpConnector作为默认连接器,肯定也是要实现Connector ...
- tomcat源码阅读之部署器
我们知道web应用是用Context实例表示的,而Context是部署到Host实例中的,因此tomcat的部署器是关联的Host实例.Context实例可以用WAR文件部署,也可以把整个web应用的 ...
随机推荐
- hdu2609 最小表示法
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me How man ...
- CCF 2015-03-3 节日
输出y1到y2年之间的每一年的a月份的第b个周c.感觉像是一个恶心的模拟.更像一个很恶心的小学奥赛题. 题目:http://115.28.138.223/view.page?gpid=T25 考试的时 ...
- jsonp 使用选择器
使用选择器语法来查找和操作元素 使用类似于css和jquery的语法来查找和操作元素 可以使用Element.select(String selector) 和 Elements.select(Str ...
- httpclient 相关使用介绍
httpclient中sessionId的获取与设置 public class HttpSessionId { public static void main(String[] args) throw ...
- 前端必学库之bootstrap
想要成为一个全栈程序员,其实有很多技术线路.很多人说有了nodejs后,只学JAVASCRIPT就可以了.其实,会NODEJS后端开发,严格来说算是高级前端.就站长个人理解,后端的主流还是4P:jsp ...
- 使用Mockito时遇到的一些问题
最近在使用Mockito时遇到了几个比较tricking的问题,在这里记录一下. 1.如果方法的参数或者返回类型是泛型通配符相关的(如<?>,<? extends XXX>), ...
- 一個不錯的免費流程圖制作軟件 Download link
The process flow software you saw yesterday which is a free software, but you need to register. Down ...
- Cisco ASA(8.4)端口映射设定(ASDM)
1.进入到Configuration→firewall→NAT Rules画面. 2.点“services”添加服务端口,此案例添加TCP 1443和UDP 1443端口映射 3.添加“Network ...
- Myecilpse web +tomcat 项目: JSP在mysql中创建表
<%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Dri ...
- Redis学习第八课:Redis高级实用特性(二)
Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...