【发布时间】:2011-09-01 11:54:18
【问题描述】:
有人告诉我,java servlet 可以异步运行。但这是否意味着对单个 servlet 的请求是异步处理的,或者只有对不同 servlet 的请求是异步的。
基本上,我的项目中有一个 servlet:
public class DummyServlet extends HttpServlet
{
...
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
response.setContentType("text/plain; charset=utf-8");
PrintWriter writer = new PrintWriter(response.getOutputStream());
writer.write("DummyServlet invocation");
System.out.print("Invocation: " + counter);
Thread.sleep(5000);
System.out.println(" ... done.");
counter++;
writer.flush();
writer.close();
}
现在,当我同时发出两个请求时,第二个会等待第一个结束。 在这种情况下如何实现异步行为?
更新:请求是异步处理的,只是我的请求不是异步生成的。
【问题讨论】:
-
servlet 中的方法是同步的,每个单独的请求都是同步处理的。但是,容器对各个请求使用单独的线程,因此它们应该在不同的线程中同时执行。为什么你认为这两个调用是串行执行的?
-
Now, when I make two simultaneous requests, the second waits for the first to end.对于给定的代码它不是真的,两者都将在不同的线程中服务 -
您在输出中究竟看到了什么?
标签: java multithreading servlets