Servlet API sagt über "AsyncContext.start":Was ist der Zweck von AsyncContext.start (...) in Servlet 3.0?
void start (java.lang.Runnable run)
Bewirkt, dass der Behälter einen Thread versenden, möglicherweise von einem Thread-Pool verwaltet wird, laufen die angegeben Runnable. Der Container kann geeignete Kontextinformationen an das Runnable weiterleiten.
Aus dieser Beschreibung ist nicht ersichtlich, wie es sich auf die Optimierung der Thread-Nutzung bezieht, wenn der Job gewartet werden muss.
In "Servlets & JSP", gibt Budi Kurniawan Beispiel für Servlet 3.0 Asynchron-Funktionen, wo er AsyncContext.start
verwendet, ich vereinfachte Version des Beispiels zeigen werden:
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();
}
});
}
In den meisten anderen Beispiele, die ich habe met, die Service-Methode speichert den AsyncContext nur irgendwo und er wird woanders bearbeitet (zB durch einen Hintergrund-Thread). In diesem Beispiel sieht es so aus, als ob der Job gerade an einen anderen Thread übergeben wird, der die Anfrage abschließt. Wie ich es verstehe, ist es jetzt einfach der Worker Thread, der beim Warten Zeit verschwendet.
Erhalten Sie tatsächlich etwas, indem Sie den Job (der das Warten beinhaltet) von einem Thread an einen anderen übergeben? Wenn nicht, was ist der Zweck von AsyncContext.start(...)
?
Ich fragte mich das Gleiche! – Deadron