Servlet API 说“AsyncContext.start”:
无效开始(java.lang.Runnable 运行)
使容器调度线程(可能来自托管线程池)以运行指定的 Runnable。容器可以将适当的上下文信息传播到 Runnable。
从这个描述中,不清楚当作业需要等待时它与优化线程使用的任务有何关系。
在“Servlet & JSP”中,Budi Kurniawan 给出了 Servlet 3.0 异步特性的示例,在他使用的地方AsyncContext.start
,我将展示示例的简化版本:
public void doGet(...) {
final AsyncContext asyncContext = request.startAsync();
asyncContext.start(new Runnable() {
@ Override
public void run() {
// do some work here which involves waiting
...
asyncContext.complete();
}
});
}
在我遇到的大多数其他示例中,服务方法只是将 AsyncContext 存储在某处,并在其他地方进行处理(例如,由后台线程)。在此示例中,该作业看起来只是传递给另一个线程,该线程完成了请求。据我了解,现在它只是工作线程,浪费时间等待。
通过将工作(包括等待)从一个线程传递到另一个线程,您真的获得了一些东西吗?如果不是,那它的目的是AsyncContext.start(...)
什么?