区别

1.注释时asyncSupported=true,显式指定开启异步调用

2.request.startAsync()导致请求被异步处理; 在服务方法结束时,响应不会发送到客户端。

3.acontext.start(new Runnable() {…​}) 从容器中获取新线程。

4.run()内部类的方法内的代码在新线程中执行。内部类可以访问异步上下文以从请求读取参数并写入响应。调用complete()异步上下文的 方法将提交响应并将其发送给客户端。

运行效果不同之处:使用异步处理后的例子在大负载的情况下响应速度变快,服务器吞吐量变大

Servlet 3.0 还为异步处理提供了一个监听器,使用 AsyncListener 接口表示。它可以监控如下四种事件:

  1. 异步线程开始时,调用 AsyncListener 的 onStartAsync(AsyncEvent event) 方法;
  2. 异步线程出错时,调用 AsyncListener 的 onError(AsyncEvent event) 方法;
  3. 异步线程执行超时,则调用 AsyncListener 的 onTimeout(AsyncEvent event) 方法;
  4. 异步执行完毕时,调用 AsyncListener 的 onComplete(AsyncEvent event) 方法;

参考来源:百度

原文地址:https://www.cnblogs.com/Fishsky1996/p/8649919.html