doGet线程安全问题的测试问题
servlet吧
全部回复
仅看楼主
level 8
老方这样做之后,第一次访问两次,打印的都是3,而我把老方的程序拷过去运行,打印出来一个2和一个3,为什么啊?求指导!
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 ServletDemo4 extends HttpServlet {
//子类不能抛比父类更多的异常
int i = 1;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
synchronized (this) { //锁旗标 锁
i++;
try {
Thread.sleep(1000*4);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.getWriter().write(i+"");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2014年06月16日 01点06分 1
level 1
你自己上面定义时:int i=1,然后在方法里i++,当然是2,和3啦。
2014年07月28日 13点07分 2
1