Какова цель AsyncContext.start (…) в Servlet 3.0?

Servlet API сообщает об «AsyncContext.start»:

void start(java.lang.Runnable run)

Causes the container to dispatch a thread, possibly from a managed thread pool, to run the specified Runnable. The container may propagate appropriate contextual information to the Runnable.

Из этого описания не ясно, как это связано с задачей оптимизации использования потока, когда задание требует ожидания.

In & quot; Servlet & amp; JSP & quot ;, Буди Курниаван приводит пример асинхронных функций Servlet 3.0, где он используетAsyncContext.startЯ покажу упрощенную версию примера:

<code>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();
        }
    });
}
</code>

В большинстве других примеров, которые я встречал, метод обслуживания просто хранит где-то AsyncContext, и он обрабатывается где-то еще (например, фоновым потоком). В этом примере похоже, что задание просто передается другому потоку, который завершает запрос. Как я понимаю, теперь это просто рабочий поток, который тратит время на ожидание.

Вы действительно что-то получаете, передавая работу (которая включает в себя ожидание) из одного потока в другой? Если нет, то какова цельAsyncContext.start(...)?

Ответы на вопрос(4)

Ваш ответ на вопрос