Какова цель 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(...)
?