在的doPost)阻挡(I定义一个servlet(它映射到/指数)和重写doPost方法是这样的:索取的HttpServlet
private Object lock = new Object();
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("start");
synchronized(lock) {
try {
lock.wait(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.notifyAll();
}
}
当第一请求进入
,它打印“开始”然后等待lock.wait(15000);
然后第二个请求来了,它应该被阻止在synchronized(lock);
我认为。但事实是,第二个请求被阻止出doPost
方法。在第一个请求变为lock.notifyAll();
后,第二个请求进入doPost
方法并打印'开始'。
我发现这只发生在两个请求查询完全相同的url时。这是Tomcat处理多线程的方式吗?我很困惑..
请参考[小服务程序如何工作?实例化,会话变量和多线程](http://stackoverflow.com/q/3106452/1065197),以更好地理解Java Web应用程序服务器(而非仅Tomcat)如何与'Servlet'和'Thread'一起使用。顺便说一句,你**绝不能**在Web应用程序中使用这种代码(至少你想被解雇)。 – 2013-02-25 08:54:47
'发射'?我认为他们会寻找谁雇用的? – Apurv 2013-02-25 09:03:15