tomcat源码阅读之SingleThreadModel
2024-10-20 08:30:26
一、接口简介:
实现了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实例全部释放:
最新文章
- 转: JAVA递归算法实例小结
- radialLine 径向线生成器
- sql server2008 R2 生成带数据的脚本
- Hbase step by step 完全分布式安装
- Unity中内置Shader源码的获取方式
- 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令
- Echarts动态数据显示
- HDU 4716 A Computer Graphics Problem
- WebView.destroy() called while still attached 的解决的方法
- spring框架内置笔记本
- cmstop传递什么控制器和方法---就实例化该控制器
- 初识golang
- Codeforces Round #427 (Div. 2) D - Palindromic characteristics
- 存储库之MongoDB、mysql
- js根据鼠标和键盘判断页面是否长时间未进行操作
- linux:scp从入门到刚入门
- BCG库的一个bug
- node学习笔记1——配置node环境变量及执行node文件
- Lua中Table的学习
- Spring,Hibernate 集成解决多hbm.xml文件繁多的方案
热门文章
- java中4种修饰符访问权限的区别
- String为什么不可变
- Mybatis学习总结-----mybatis中refid是什么意思(十)
- spring boot 学习(十四)SpringBoot+Redis+SpringSession缓存之实战
- golang优先队列
- Mysql 中Left/Right join on后面and和where条件查询的差异-Mysql SQL运算符是有优先级
- 元素大小-偏移量(offset)客户区大小(client)滚动大小(scroll)
- Redis学习第八课:Redis高级实用特性(二)
- HRBUST单词接龙
- 如何使用 python3 将RGB 图片转换为 灰度图