相关疑难解决方法(0)

Servlet 3.0中AsyncContext.start(...)的用途是什么?

Servlet API说"AsyncContext.start":

void start(java.lang.Runnable run)

使容器可能从托管线程池调度线程,以运行指定的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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在我遇到的大多数其他示例中,服务方法只是将AsyncContext存储在某处,并在其他地方处理(例如,通过后台线程).在这个例子中,它似乎只是将作业传递给另一个完成请求的线程.据我所知,现在它只是工作线程,浪费时间等待.

你是否通过将工作(涉及等待)从一个线程传递到另一个线程来获得某些东西?如果没有,那么目的是AsyncContext.start(...)什么?

servlets servlet-3.0

19
推荐指数
2
解决办法
7856
查看次数

标签 统计

servlet-3.0 ×1

servlets ×1