Убивает работающую банку с очисткой?

Я новичок в мире многопоточности и развертывания кода на сервере. У меня есть проект, который имеет основной поток. Этот основной поток имеет пул из 10 других потоков, которые "запрашивают" другое оборудование с использованием SNMP. Затем эти потоки выполняют некоторые операции с базой данных, и эта база данных переходит в интерфейс веб-приложения. Основной поток использует планировщик для постоянного выполнения задачи и повторяется каждые 15 секунд.

В eclipse я экспортировал работающий.jar и запустил его на сервере, используя "nohup java -jar nameOfJar.jar &". Теперь, чтобы убить этот процесс, я использую "ps -ef | grep java", чтобы увидеть, какой PID работает с именем nameOfJar.jar, и использую "kill PIDofNameOfJar", чтобы фактически убить процесс. Я новичок в многопоточности и мне интересно, что происходит с потоками, когда я использую команду kill. Делается ли какая-нибудь очистка на них? Или я должен иметь код для решения этой проблемы? Или я не должен использовать команду kill, чтобы остановить работающую банку?

Я думаю, что, поскольку я убиваю основной процесс, остальные 10 потоков не будут прерваны, если они были отправлены, но я не уверен.

Любая помощь будет оценена!

1 ответ

Никакой другой очистки, кроме освобождения ресурсов, хранящихся в JVM, нет (так что в основном выделяется память, возможно, сокеты и перехватчики файлов). Любые другие операции (например, фиксация или прерывание транзакций БД) должны быть выполнены до этого, так как это не произойдет автоматически.

Вы можете подключиться к процессу выключения JVM через Runtime.addshutdownhook(), Этот хук будет выполнен, когда JVM закрывается (не так, как из-за ошибки JVM), например. когда сигтер отправляется в JVM. Вы можете сделать свою уборку там.

Другие вопросы по тегам