Java 当异步rest web服务已经在异步运行时,为什么我们需要它?

Java 当异步rest web服务已经在异步运行时,为什么我们需要它?,java,ajax,web-services,rest,jax-rs,Java,Ajax,Web Services,Rest,Jax Rs,我创建了一个简单的RESTWeb服务,如下所示。它不是异步的 @Path("/rest") class rest{ @GET @Path("/asyncTest") public String AsyncTest(){ //Some long operation Thread.sleep(60000); return "Success"; } } 我的客户是一个浏览器 如果我在3个不同的浏览器中

我创建了一个简单的RESTWeb服务,如下所示。它不是异步的

@Path("/rest")
class rest{
     @GET
     @Path("/asyncTest")
     public String AsyncTest(){
          //Some long operation
          Thread.sleep(60000);
          return "Success";
     }
}
我的客户是一个浏览器

如果我在3个不同的浏览器中点击这个web服务,这就是我观察到的

Chrome Browser  --> Hit request 12:00 AM --> Response 12:01 AM
Firefox Browser --> Hit request 12:00 AM --> Response 12:01 AM
Opera Browser   --> Hit Request 12:00 AM --> Response 12:01 AM
如果我的简单web服务不是异步的,我应该得到以下结果,对吗

Chrome Browser  --> Hit request 12:00 AM --> Response 12:01 AM
Firefox Browser --> Hit request 12:00 AM --> Response 12:02 AM
Opera Browser   --> Hit Request 12:00 AM --> Response 12:03 AM

但事实并非如此。在这种情况下,为什么我必须使用异步Web服务?

这不是异步执行,而是并发执行。为了理解这一点,我们可以举一个servlet执行的例子。Servlet包含一个线程池来处理请求,所以如果有任何请求出现,它将使用池中的可用线程来处理请求,并且在返回响应后,该线程将返回到池中。在此处理过程中,该线程将无法接受其他请求,容器将使用其他可用线程来处理这些请求。如果所有线程都很忙,那么新的请求将等待获得一些可用线程,以将其作为同步执行来执行。
对于异步执行,我们将线程分为请求线程和工作线程。请求线程将接收请求并将其移交给工作线程,然后工作线程将异步处理该请求并返回响应。这样,请求线程将立即可用,与同步执行相比,它可以接受更多的请求。不过,异步执行也需要注意,因为在某些情况下,服务器可能会因内存不足而出错。请参考下面的URL以获取更多详细信息以及如何实现它。

我不会从整分钟的时间安排中得出这样的结论……异步是关于保存线程,而不是并发性。阅读你需要解释为什么你期待你所指出的结果。