servlet单实例多线程例子

2024-12-02 23:51:08
推荐回答(2个)
回答1:

在单机上,任意一个servlet都是单实例(只初始化一次),并且被多线程访问(多个客户端请求),那么它的实现原理是servlet作为工具类(或者说叫无状态类),所以核心在于无状态
package org.ggff.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();
}
}
}

回答2:

servlet中的init方法只有在启动的时候调用,也就是只初始化一次,这就是单实例。
servlet在处理请求的时候 调用的是service方法,这个方法可以处理多个客户端的请求。