Per richiesta indica quando viene effettuata una richiesta HTTP, un thread viene creato o recuperato da un pool per servirlo. Un thread serve l'intera richiesta. Thread per connessione sarebbe la stessa cosa, tranne il thread è utilizzato per un'intera connessione, che potrebbe essere più richieste e potrebbe anche avere un sacco di tempo morto tra le richieste. I contenitori servlet sono thread per richiesta. Potrebbero esserci alcune implementazioni che offrono thread per connessione, ma non lo so, e sembra che sarebbe molto dispendioso.
La creazione di un thread all'interno di un altro thread non stabilisce alcuna relazione speciale e l'intero punto in cui farlo nella maggior parte dei casi consiste nel lasciare che un thread funzioni di più o termini mentre l'altro thread continua a funzionare. Nello scenario, l'utilizzo di una thread diversa per eseguire il lavoro richiesto da una richiesta consentirà, come previsto, di inviare immediatamente la risposta. Anche il thread utilizzato per servire quella richiesta sarà immediatamente disponibile per un'altra richiesta, indipendentemente da quanto tempo ci vorrà per completare l'altro thread. Questo è praticamente il il modo di eseguire il lavoro asincrono in un contenitore di servlet thread-per-request.
Avvertenza: Se si è in un contenitore Java EE completo, i thread possono essere gestiti in modo tale da rendere una cattiva idea generare il proprio. In tal caso, è meglio chiedere al contenitore una discussione, ma i principi generali sono gli stessi.
fonte
2011-09-17 19:28:04
Questo non è il modo in cui si dovrebbe eseguire il lavoro asincrono in un contenitore, potrebbe essere il più semplice ma non è consigliabile. http://stackoverflow.com/questions/533783/why-spawning-threads-in-j2ee-container-is-discouraged/533847#533847 – Robin
@Robin: buona chiamata. Ho aggiunto un avvertimento sui contenitori JEE pieni. Di solito penso in termini di semplici contenitori servlet. –
@Robin: Grazie ragazzi. Non sto gestendo il ciclo di vita del filo da solo. Ho intenzione di usare Spring TaskExecutor abstraction.http: //static.springsource.org/spring/docs/2.0.x/reference/scheduling.html#scheduling-task-executor-usage La mia app web funziona sotto tomcat 6. Spring anche fornire l'implementazione del workmanager come menzionato nel link ma dice la sua specifica non JEE. Quale è meglio nel mio ambiente? – hellojava