servlet多线程:在Servlet和JSP中如何实现多线程安全?来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
1.Servlet生命周期 Servlet生命周期是由Web容器负责,当客户端第次请求Servlet时,容器负责化Servlet,也就是例子化这个Servlet类.以后这个例子就负责客户端请求,般不会再例子化其他Servlet类,也就是有多个线程在使用这个例子.Servlet的所以比CGI效率高就是Servlet是多线程.如果该Servlet被声明为单线程模型话,容器就会维护个例子池,那么将存在多个例子. 2.Servlet线程安全 Servlet规范标准已经声明Servlet不是线程安全,所以在开发Servlet时候要注要这个问题.这里以个现实模型来介绍说明问题,先定义个Servlet类,再定义个SmulateMultiThread类和WebContainer类. import javax.servlet.http.HttpServlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; //该类模拟多线程Servlet情况 public SmulateMultiThread implements Runnable{ public SmulateMultiThread { } public void (String args) { //处理100个请求 for( i=0;i<100;i) { Thread( SmulateMultiThread).start; } } public void run { HttpServletRequest request=null; HttpServletResponse response=null; try { WebContainer.getServlet.doGet(request, response); } catch (IOException ex) { } catch (ServletException ex) { } } } //这是个Servlet类 UnsafeServlet extends HttpServlet{ private String unsafe; public void init throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { unsafe=Thread.currentThread.getName; .out.prln(unsafe); } } //这个是容器类 WebContainer{ private UnsafeServlet us= UnsafeServlet; public UnsafeServlet getServlet{ |