1、初始化阶段,init方法:负责初始化Servlet对象。
2、提供服务,service方法:负责响应客户的请求。
3、销毁,destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
当第一个用户访问web用户时,servlet实例化。此后有用户访问,web容器均为其创建一个单独的线程来处理用户请求。此时便涉及到线程同步的问题。
解决线程同步的方法有:
1.继承SingleThreadModel接口。
对于不同的容器商对SingleThreadModel的实现不同,分为:
1)对所有的请求排队,一个一个的响应。
2)新建servlet的多个实例,以实例池的方式,对外提供服务。
采用这种方法会使系统的性能大受影响,比较慢。
2.对service方法里面的代码块进行同步。
public void service(HttpServletRequest request, HttpServletResponse response){
Synchronized(this){
.............
}
}
3.不使用实例变量,使用局部变量。
1) 实例变量时在堆上分配的,为所有线程共享,所以不是线程安全的
2)局部变量在栈上分配,由于每个线程都有自己的的执行堆栈,所以是局部安全的