Я столкнулся с проблемой удаления или завершения работы некоторых потоков в моей командной строке java приложения. Когда основной метод завершается, некоторые потоки все еще работают с избыточностью.
В следующих строках указаны все запущенные потоки в конце основного метода:
pool-1-thread-5; Is Daemon false;Is Alive true
pool-1-thread-2; Is Daemon false;Is Alive true
AMQP Connection xx.xx.x.xxx:5672; Is Daemon false;Is Alive true
Finalizer; Is Daemon true;Is Alive true
Reference Handler; Is Daemon true;Is Alive true
main; Is Daemon false;Is Alive true
Signal Dispatcher; Is Daemon true;Is Alive true
pool-1-thread-3; Is Daemon false;Is Alive true
pool-1-thread-4; Is Daemon false;Is Alive true
Я не знать происхождение всех потоков пула * и потока AMQP, остальные в порядке, потому что они являются потоками демона и основным потоком
Моя цель - избавиться от потоков пула * и потока AMQP без использования System.exit () и CTRL + C в терминале
Я пробовал следующий метод в конце main:
Thread.getAllStackTraces().keySet().forEach((t) -> {
if(t.getName().startsWith("pool") || t.getName().startsWith("AMQP")) {
t.stop();
t.destroy();
}
});
Но всегда получаю исключение, я пытался использовать только метод stop, только destroy. Подскажите, пожалуйста, как можно отследить источник избыточных потоков или упростить, как я могу их уничтожить
Спасибо