一、接口简介:

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

最新文章

  1. 转: JAVA递归算法实例小结
  2. radialLine 径向线生成器
  3. sql server2008 R2 生成带数据的脚本
  4. Hbase step by step 完全分布式安装
  5. Unity中内置Shader源码的获取方式
  6. 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令
  7. Echarts动态数据显示
  8. HDU 4716 A Computer Graphics Problem
  9. WebView.destroy() called while still attached 的解决的方法
  10. spring框架内置笔记本
  11. cmstop传递什么控制器和方法---就实例化该控制器
  12. 初识golang
  13. Codeforces Round #427 (Div. 2) D - Palindromic characteristics
  14. 存储库之MongoDB、mysql
  15. js根据鼠标和键盘判断页面是否长时间未进行操作
  16. linux:scp从入门到刚入门
  17. BCG库的一个bug
  18. node学习笔记1——配置node环境变量及执行node文件
  19. Lua中Table的学习
  20. Spring,Hibernate 集成解决多hbm.xml文件繁多的方案

热门文章

  1. java中4种修饰符访问权限的区别
  2. String为什么不可变
  3. Mybatis学习总结-----mybatis中refid是什么意思(十)
  4. spring boot 学习(十四)SpringBoot+Redis+SpringSession缓存之实战
  5. golang优先队列
  6. Mysql 中Left/Right join on后面and和where条件查询的差异-Mysql SQL运算符是有优先级
  7. 元素大小-偏移量(offset)客户区大小(client)滚动大小(scroll)
  8. Redis学习第八课:Redis高级实用特性(二)
  9. HRBUST单词接龙
  10. 如何使用 python3 将RGB 图片转换为 灰度图