Servlet的单实例多线程
来源:互联网 发布:网络交换机图片 编辑:程序博客网 时间:2024/06/05 16:53
首先明确:Servlet是单实例的,即对于同一种业务请求只有一个是实例。不同的业务请求可以通过分发来产生多个实例。
其次:单实例的原因我想是因为单实例足可以处理某一个请求,就像ibatis的Querydao、UpdateDao一样都是单实例的。
再次:为什么单实例足可以处理某一个请求,因为Servlet是单实例多线程的。
http://hiyachen.cublog.cn chf@tsinghua.org.cn
先看一段代码:
package hiya.test;
public class Servlet {
private static Servlet instance=new Servlet();
private Servlet(){
}
public static Servlet getInstance(){
return instance;
}
public void services(){
System.out.println("do something");
}
static class Client extends Thread{
private Servlet servlet;
public Client(Servlet servlet){
this.servlet=servlet;
}
public void run(){
servlet.services();
//System.out.println("do something");
}
}
public static void main(){
Servlet servlet=Servlet.getInstance();
for(int i=0;i<10;i++){
Client client=new Client(servlet);
client.start();
}
}
}
这是单实例多线程的实现代码。(真想把jdk源码贴出来。)
其次:单实例的原因我想是因为单实例足可以处理某一个请求,就像ibatis的Querydao、UpdateDao一样都是单实例的。
再次:为什么单实例足可以处理某一个请求,因为Servlet是单实例多线程的。
http://hiyachen.cublog.cn chf@tsinghua.org.cn
先看一段代码:
package hiya.test;
public class Servlet {
private static Servlet instance=new Servlet();
private Servlet(){
}
public static Servlet getInstance(){
return instance;
}
public void services(){
System.out.println("do something");
}
static class Client extends Thread{
private Servlet servlet;
public Client(Servlet servlet){
this.servlet=servlet;
}
public void run(){
servlet.services();
//System.out.println("do something");
}
}
public static void main(){
Servlet servlet=Servlet.getInstance();
for(int i=0;i<10;i++){
Client client=new Client(servlet);
client.start();
}
}
}
这是单实例多线程的实现代码。(真想把jdk源码贴出来。)
servlet单实例多线程处理原理:
servlet中的init方法只有在启动(例如web容器启动,要看loadOnStartup的设置)的时候调用,也就是只初始化一次,这就是单实例。servlet在处理请求的时候 调用的是service方法,这个方法可以处理多个客户端的请求。
具体访问时:
JSP 在web容器中"翻译成servlet"由容器执行,web 容器本身就是提供的多线程,A,B,C 3个访问,建立3个独立的线程组,然后运行一个servlet。依次执行。
这就解决了多用户同一实例实行的困惑。
要注意几点:
1:servlet首先不是现成线程的。2:Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。Servlet容器会自动使用线程池等技术来支持系统的运行3:设定jsp:<%@ page isThreadSafe="false"%>来实现单线程。当你需要保证数据一致性的时候,必须自己处理线程安全问题时可以考虑单线程。
0 0
- Servlet的单实例多线程
- Servlet的单实例多线程
- servlet单实例多线程
- servlet单实例多线程
- servlet 单实例多线程
- servlet单实例多线程
- Servlet多线程单实例
- servlet 单实例多线程
- Servlet是单实例,多线程的吗?
- Servlet的单实例多线程机制
- 怎样理解Servlet的单实例多线程
- 怎样理解Servlet的单实例多线程
- 怎样理解Servlet的单实例多线程
- 如何理解 servlet 的单实例多线程
- 怎样理解Servlet的单实例多线程
- 怎样理解Servlet的单实例多线程
- 怎样理解Servlet的单实例多线程
- 怎样理解Servlet的单实例多线程
- spring boot集成swagger
- 经典数据结构
- CMD 命令输出保存到TXT文件
- org.apache.ibatis.reflection.ReflectionException:There is no getter for property named 'parentId' in
- unit14
- Servlet的单实例多线程
- Spring教程--入门程序
- Java多线程应用场景
- pg学习_运算符,表达式
- Shadowsocks 一键安装脚本(四合一)
- HIVE UDAF 各阶段及调用方法
- 通过ip连接MySQL时出现1449、1045异常
- java取得Mysql主键,在Mysql获取表中所有的主键
- 使用DOS命令访问mysql