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();
}
});
}
В большинстве других примеров Я встречал, метод службы просто где-то хранит AsyncContext и обрабатывается где-то еще (например, фоновым потоком). В этом примере похоже, что задание просто передается другому потоку, который выполняет запрос. Как я понимаю, сейчас это просто рабочий поток, который тратит время на ожидание.
Получаете ли вы что-то, передавая задание (которое включает ожидание) из одного потока в другой? Если нет, то какова цель AsyncContext.start(...)
?