Подтвердить что ты не робот

Должны ли потоки быть специальным дизайном, чтобы изящно закрыть Tomcat?

Я разработал многопоточное веб-приложение, которое работает в Tomcat. Но я не могу использовать

shutdown.bat

Томкат не прекратил изящно. В отладчике я увидел, что потоки продолжают работать после завершения команды. Нужно ли мне исправлять код приложения для удовлетворения особых требований? Спасибо.

4b9b3361

Ответ 1

... и привязать другие ответы к работам сред Java Servlet;

если вы не объявляете свои потоки как потоки демона, способ сигнализировать о завершении работы сервера для потоков - это реализовать ServletContextListener и настроить его в своем веб-приложении (web.xml). Когда Tomcat отключается, он сначала отключит каждое приложение, которое, в свою очередь, вызовет метод contextDestroyed() для прослушивателя, - и это то, где вы можете сигнализировать своим собственным потокам, что они должны закончить свою работу.

Ответ 2

Любые потоки, которые все еще запущены, сохранят процесс Java (Tomcat). Убедитесь, что все ваши потоки завершены. После выхода ваших потоков Tomcat сможет завершить работу.

См. javadoc для Thread. Обратите внимание на следующее:

Виртуальная машина Java продолжает выполнять потоки, пока не произойдет одно из следующих действий:

  • Вызывается метод выхода класса Runtime, и менеджер безопасности разрешил операцию выхода.
  • Все потоки, которые не являются потоками демона, умерли, либо возвратившись из вызова метода запуска, либо выбросив исключение, которое распространяется за пределы метода run.

Ответ 3

Вам нужно отменить свои потоки, желательно, набрав interrupt на них и убедившись, что они написаны таким образом, что они отвечают на прерывание - значит, проверяя свой прерванный флаг и интеллектуально реагируя на InterruptedExceptions (не только едя их и продолжая).

В приведенном выше совете предполагается, что вы не хотите, чтобы ваши потоки сразу бросали то, что они делают. Если вы в порядке с этим, то сделайте их демонами.