区别
1.注释时asyncSupported=true,显式指定开启异步调用
2.
request.startAsync()
导致请求被异步处理; 在服务方法结束时,响应不会发送到客户端。
3.acontext.start(new Runnable() {…})
从容器中获取新线程。
4.run()
内部类的方法内的代码在新线程中执行。内部类可以访问异步上下文以从请求读取参数并写入响应。调用complete()
异步上下文的 方法将提交响应并将其发送给客户端。
运行效果不同之处:使用异步处理后的例子在大负载的情况下响应速度变快,服务器吞吐量变大
Servlet 3.0 还为异步处理提供了一个监听器,使用 AsyncListener 接口表示。它可以监控如下四种事件:
- 异步线程开始时,调用 AsyncListener 的 onStartAsync(AsyncEvent event) 方法;
- 异步线程出错时,调用 AsyncListener 的 onError(AsyncEvent event) 方法;
- 异步线程执行超时,则调用 AsyncListener 的 onTimeout(AsyncEvent event) 方法;
- 异步执行完毕时,调用 AsyncListener 的 onComplete(AsyncEvent event) 方法;
参考来源:百度