package com.hqit.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ThreadServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
int sum = 1;
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
sum = sum + 10;
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
sum = sum + 100;
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
sum = sum + 1000;
System.out.println(sum);
resp.sendRedirect("show.jsp");
}
}
忘大家说说原因,谢谢。。。
[color=red]protected void doGet(HttpServletRequest req, HttpServletResponse resp)[/color]
throws ServletException, IOException
{
[color=red]int sum = 1; [/color]
sum变量在方法体内部,属于本地线程,当有多线程请求此Servlet时每个线程都会有此变量,所以不存在线程安全问题。
,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行
当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。所以在用Servlet构建的Web应用时如果不注意线程安全的问题,会使所写的Servlet程序有难以发现的错误。
这个Thread.sleep(2000); 只是让程序在这停留2秒钟
你这实际上是一个SERVLET,不是一个线程
所以没有安全不安全的说法
关于Servlet线程安全的解决方法详细说明 请看这个网站
http://developer.51cto.com/art/200907/133827.htm
呢,并不存在实例变量,所以是安全的