Каждый запрос обрабатывается в отдельном потоке. Это не «поток на пользователя». Запрос - это любое взаимодействие со стороны клиента (веб-браузера) и сервера. Таким образом, набирая URL в вашем браузере, вызывая ajax-запрос, каждый обрабатывается в отдельном потоке.
Состояние, которое пользователь получает во время «входа в систему» (само по себе это не обязательно должен быть вход в систему; лучший способ сказать, что это «набор связанных запросов одного пользователя») удобно сохраняется в сеансе , Вы можете использовать сеанс для хранения любых данных, которые применимы к пользователю, хотя вы должны быть осторожны, чтобы не хранить слишком много данных, потому что они расходуют память. Управление сессиями требует определенной квалификации.
Да, вы должны быть очень осторожны, если запускаете новые темы; Вы можете сломать вещи, и, как правило, это плохая идея. Если вам нужно сделать что-то, что займет много времени, используйте JMS для асинхронной обработки. Также помните, что не все задачи, которые влияют на данные веб-приложения, должны вызываться из веб-приложения. Задача, которая ежедневно сканирует данные, может быть запущена как отдельная задача в tomcat или вне ее - т.е. вы можете написать задание, используя что-то вроде кварцевого планировщика, или даже написать отдельную программу и настроить ее для работы в cron (быть осторожно, хотя работа по изменению данных из-под вашего веб-приложения).
Если вы используете лучшие в своем классе технологии, такие как Spring и Hibernate, они обычно связывают объекты (или могут быть настроены разработчиком приложения), которые понадобятся программисту для каждого потока (с помощью ThreadLocal в Java).
Это также одна из причин, по которой запуск собственных потоков опасен. Если вы запустите свой собственный поток, вы можете потерять ресурсы, связанные с исходным потоком, когда запрос закончится, и это означает, что если вы попытаетесь получить доступ к этим ресурсам в вашем рабочем потоке, они не будут доступны. Этот тип ошибки может быть проблемой в заднице, чтобы найти / исправить.
edit - как отметил Стивен С. в комментарии для другого ответа, важно отметить, что обычно Tomcat (и другие контейнеры) поддерживают пул потоков для использования. Это означает, что новый поток не обязательно создается для каждого запроса. Это означает, что каждый запрос запускает в отдельном потоке, который может или не может быть создан или использован повторно.