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

 

原文地址:https://www.cnblogs.com/laoxia/p/7994035.html