2016-02-19 4 views
1

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

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

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

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

ответ

0

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

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

Смежные вопросы