servlet的SingleThreadModel模式

computerlibin 2011-11-22 08:16:15
最近在学习servlet,看到servlet是单例模式,为保证线程安全可以让servlet实现SingleThreadModel接口,之后我在网上查了查,说法有两种:
1、实现了SingleThreadModel接口的servlet不是单例模式,每个请求线程都会创建一个servlet实例(还说servlet对象池什
么的,我就不明白了。。。)
2、实现了SingleThreadModel接口的servlet仍是单例模式,但是此servlet单例每次只允许一个请求线程运行其service方法
我想问问大侠们这个到底是怎么理解才对呢?
...全文
353 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
computerlibin 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 a328240784 的回复:]

不要实现。。。要想同步,在同步的地方加synchronized。
[/Quote]
那是先是做什么用的?是什么原理?
阳明 to life 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 computerlibin 的回复:]

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现SingleThreadModel就只有单线程访问

那怎么创……
[/Quote]
比如你有一个MyServlet,然后在第一次请求到达后容器会创建一个MyServlet的实例A
你自己也可以new MyServlet创建实例B A==B返回false
computerlibin 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xieshengjun2009 的回复:]

引用 2 楼 computerlibin 的回复:

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现Sing……
[/Quote]
你能解释一下我的问题吗?主要是实现SingleThreadModel模式是servelt在tomcat下是单实例还是多实例?
追风筝的孩子 2011-11-23
  • 打赏
  • 举报
回复
不要实现。。。要想同步,在同步的地方加synchronized。
computerlibin 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouyuqwert 的回复:]

引用 6 楼 computerlibin 的回复:

引用 5 楼 zhouyuqwert 的回复:

引用 2 楼 computerlibin 的回复:

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有loa……
[/Quote]
实现singlethreadmodel是什么意思?
阳明 to life 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 computerlibin 的回复:]

引用 5 楼 zhouyuqwert 的回复:

引用 2 楼 computerlibin 的回复:

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求……
[/Quote]
容器不会创建多个实例 你想探讨的是Servlet的是否是单例模式,既然这个返回false那你管容器能创建几个作甚
computerlibin 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhouyuqwert 的回复:]

引用 2 楼 computerlibin 的回复:

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现Sing……
[/Quote]
这个一定返回false,但是我想问的是tomcat能不能帮我创建多实例的servlet
xieshengjun2009 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 computerlibin 的回复:]

引用 1 楼 zhouyuqwert 的回复:

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现SingleThreadModel就只有单线程访问

那怎么创……
[/Quote]
这是效率问题,系统的优化方案,公司会让你创建多个实例玩吗?
我也想玩那,特别是想声明一个私有的妹妹玩!行吗!?说多了!这都是话外!
computerlibin 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyuqwert 的回复:]

servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现SingleThreadModel就只有单线程访问
[/Quote]
那怎么创建多个servlet实例玩呢?
阳明 to life 2011-11-22
  • 打赏
  • 举报
回复
servlet不是单例模式,只是一般情况只创建一个实例,你想的话完全可以自己新建servlet玩
不是单例模式,但是servlet只会在第一次请求创建一次实例,如果有load-on-startup则在容器启动时创建一次
每次请求都会创建一个线程来访问servlet,但是实现SingleThreadModel就只有单线程访问

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧