¿Cuál es el propósito de AsyncContext.start (…) en Servlet 3.0?

La API de Servlet dice acerca de "AsyncContext.start":

inicio vacío (java.lang.Runnable run)

Hace que el contenedor envíe un subproceso, posiblemente desde un grupo de subprocesos administrados, para ejecutar el Runnable especificado. El contenedor puede propagar información contextual apropiada al Runnable.

De esta descripción no queda claro cómo se relaciona con la tarea de optimizar el uso de hilos cuando el trabajo requiere espera.

En "Servlet y JSP", Budi Kurniawan da un ejemplo de las características asíncronas de Servlet 3.0, donde usaAsyncContext.start, Voy a mostrar la versión simplificada del ejemplo:

<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>

En la mayoría de los otros ejemplos que he conocido, el método de servicio simplemente almacena el AsyncContext en algún lugar y se procesa en otro lugar (por ejemplo, por un hilo de fondo). En este ejemplo, parece que el trabajo se acaba de pasar a otro hilo, lo que completa la solicitud. Según tengo entendido, ahora es simplemente el subproceso de trabajo, que desperdicia el tiempo en la espera.

¿Realmente ganas algo al pasar el trabajo (lo que implica esperar) de un hilo a otro? Si no, entonces ¿cuál es el propósito deAsyncContext.start(...)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta