Я использую сервер websphere. У меня есть сервлет, который действует как процессор запросов. Поскольку запрос выполняется для (много) фоновой обработки, мне нужно просто создать поток, который будет выполнять все эти фоновые задания. В то же время мой процессор запросов должен вернуться после запуска этого потока. То, что я нахожу из поиска журнала, - это как только мой процессор запросов вернется, поток фоновой обработки также, похоже, выходит, поскольку он не дает никаких сообщений журнала. Я попытался сделать фоновый поток демонами один, но снова он не оставляет сообщений журнала. Разве поток обработчика запросов, который запускается websphere, не остается в пуле потоков навсегда? В таком случае не должен ли мой фоновый поток работать? Даже если процессор запросов умирает, разве это не означает, что фоновый поток является потоком демона, он должен продолжать выполнять? Просьба уточнить. Если есть какие-то недостатки в моем понимании того, как websphere управляет своими потоками. Пожалуйста, помогите мне понять это.Сохранение потока дочерних потоков
EDIT: Проблема была solved.Actually это был мой bad.I был сдерживая HttpServletRequest объект для работы с использованием в фоновом режиме thread.But так или иначе он разрушается после того, как запрос вернулся из сервлета. Таким образом, в моем фоновом потоке было исключение из null-указателя, и оно было завершено. Мне все же нужно выяснить жизненный цикл объекта HttpServletRequest и когда он точно уничтожен. Если вы можете помочь мне понять это, я буду благодарен. Спасибо в любом случае!
EDIT: Добавление, что Servlets specification должен сказать об этом: Каждый объект запроса является действительным только в пределах метода обслуживания сервлета или в рамках метода doFilter фильтра, если не асинхронной обработки для компонента, и метод startAsync вызывается по запросу объект. В случае, когда происходит асинхронная обработка, объект запроса остается действительным до тех пор, пока полное завершение не будет вызвано в AsyncContext. Контейнеры обычно перерабатывают запрашивают объекты, чтобы избежать служебных затрат на объект запроса . Разработчик должен знать, что поддержка ссылок на объекты запроса , для которых startAsync не вызывается за пределами области действия, описанной выше, не рекомендуется , так как она может иметь неопределенные результаты.
Вы называете 'Thread.start()'? Пробовали ли вы использовать JVisualVM для наблюдения за состояниями Thread? –
Да, я использую Thread.start(). Я понятия не имею о JVisualVM. – mawia
Оберните метод 'run()' вашей нити в исключениях try-catch и журналов, возможно, даже Error - потому что иначе вы не увидите ошибку. Это относится ко многим пулам потоков, исполнителям и тому подобным. –