Наверное, я пока не могу ответить на ответы. Ответ Эдди не совсем правильный.
Я нашел этот вопрос, потому что я пытаюсь выяснить, почему мое веб-приложение не закрывается должным образом; У меня есть темы, которые не убиваются при запуске shutdown. *. Фактически, он останавливает некоторые потоки, но в конечном итоге просто сидит в каком-то подвешенном состоянии. Мой класс почти такой же, как этот.
Ввод Ctrl + C в окне Tomcat на переднем плане (в Windows) останавливает все, однако использование сценария инициализации, поставляемого с Tomcat, этого не делает. К сожалению, я еще не понял, почему ...
Редактировать: Я понял это. Большинство моих потоков мониторинга запускаются в ServletContextListener, но когда этот контекст был «уничтожен», дочерние потоки не были уведомлены. Я исправил это, просто сохраняя все дочерние потоки в списке и просматривая их, вызывая Thread.interrupt () для каждого в методе contextDestroyed (). Это почти то же самое, что сказал Эдди о методе destroy () сервлета.
Однако неправильно, что JVM отключается при запуске shutdown. {Sh | bat}. Это больше похоже на то, что этот скрипт отправляет запрос на отключение компонентам Tomcat. Вам решать получать эти сообщения о завершении работы и передавать их вашим собственным объектам.