【问题标题】:Are the http requests to a HttpServlet handled asynchronously对 HttpServlet 的 http 请求是否异步处理
【发布时间】: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


【解决方案1】:

通过实现,每个 servlet 请求都在不同的线程中运行。所以这是一种异步行为。

【讨论】:

  • 没有解释他正在经历的行为。
  • @aioobe - 是的,但也许他很困惑,他们在现实中是分开运行的。我想不出任何理由。
  • 读完后我意识到浏览器并没有以异步方式生成请求。
  • @comco - 是什么让您认为这是同步的?也许第二个请求发送速度较慢,而第一个请求已经完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多