Ogni richiesta viene gestita in un thread diverso. Questo non è un "thread per utente". Una richiesta è qualsiasi interazione dal client (browser Web) e dal server. Quindi, digitando un URL nel tuo browser, invocando una richiesta Ajax, ognuno viene gestito in un thread separato.
Lo stato che un utente acquisisce durante un 'accesso' (non deve essere un accesso di per sé, un modo migliore per dire che è "un insieme di richieste correlate da parte di un utente") è comodamente memorizzato nel sessione. È possibile utilizzare la sessione per memorizzare tutti i dati che è applicabile per l'utente, anche se si deve stare attenti a non archiviare troppi dati perché si mangia la memoria. La gestione delle sessioni richiede un certo grado di abilità.
Sì, è necessario essere molto attenti se a fare fuoco fuori nuove discussioni; puoi rompere le cose, e tipicamente è una cattiva idea. Se devi fare qualcosa che richiederà molto tempo, usa JMS per gestire qualsiasi cosa sia in modo asincrono. Ricorda inoltre che non tutte le attività che riguardano i dati delle applicazioni web devono essere richiamate dall'app web. Un'attività che esegue la scansione giornaliera dei dati può essere eseguita come attività separata all'interno o all'esterno di tomcat, ovvero è possibile scrivere un lavoro utilizzando qualcosa come il programma di pianificazione quarziani, o anche scrivere un programma separato e configurarlo per l'esecuzione in un cron (be attento al lavoro che cambia i dati da sotto la tua webapp, però).
Se si utilizzano tecnologie best of breed come Spring e Hibernate, in genere collegano gli oggetti (o possono essere configurati dallo sviluppatore dell'app) che il programmatore necessiterà per ciascun thread (utilizzando ThreadLocal di java).
Questo è anche uno dei motivi per iniziare la propria discussioni è pericoloso. Se inizi il tuo thread, potresti perdere risorse che sono legate al thread iniziale quando la richiesta termina, e questo significa che se provi ad accedere a quelle risorse nel tuo thread di lavoro non saranno disponibili. Questo tipo di bug può essere un rompicapo da trovare/risolvere.
modifica - come Stephen C ha sottolineato in un commento per un'altra risposta, è importante notare che in genere Tomcat (e altri contenitori) gestiscono un pool di thread da utilizzare. Ciò significa che un nuovo thread non viene necessariamente creato per ogni richiesta. Ciò significa che ogni richiesta eseguito in un thread separato, che può o non può essere creato o riutilizzata.
Si possono trovare [questa risposta] (http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables/3106909#3106909) utile pure. – BalusC