Servlet线程安全问题
线程安全问题
当我们访问servlet的时候,我们需要执行实例化操作,创建一个servlet对象。而我们tomcat容器可以让多个线程并发访问Servlet,如果在方法当中对成员变量做修改,就会出现线程安全问题。
如何保证线程安全
1、synchronized :这种方式会大量的造成线程堵塞
public class MyServlet extends GenericServlet{
@Override
public synchronized void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("做服务-----");
}
}
2、实现SingleThreadModel接口
public class MyServlet extends GenericServlet implements SingleThreadModel{
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("做服务-----");
}
}
servlet实现SingleThreadModel接口后,每个线程都会创建servlet实例,这样每个客户端就不存在线程资源共享资源的问题,但是servlet响应客户端请求效率太低,所以淘汰。
3、尽可能使用局部变量