2 ответов:
Вы можете прикрепить shutdown hook к виртуальной машине, которая запускается всякий раз, когда виртуальная машина выключается:
виртуальная машина Java завершает работу в ответ на два вида событий:
программа завершает работу нормально, когда завершается последний поток без демона или когда завершается выход (эквивалентно, System.exit) вызывается метод, или
виртуальная машина завершается в ответ на прерывание пользователя, например как набрав Ctrl+C, или общесистемное событие, такое как выход пользователя из системы или завершение работы системы.
поток, который вы передаете как shutdown hook, должен следовать нескольким правилам, поэтому внимательно прочитайте связанную документацию, чтобы избежать каких-либо проблем. Это включает в себя обеспечение безопасности потоков, быстрое прекращение потока и т. д.
кроме того, как указывает комментатор Йеспер, крючки выключения гарантированно работают в обычном режиме завершение работы виртуальной машины, но если процесс ВМ прекращается в принудительном порядке, они не. Это может произойти, если машинный код напортачит или если вы принудительно убить процесс (
kill -9,taskkill /f).но в этих сценариях все ставки в любом случае выключены, поэтому я бы не стал тратить слишком много времени на это.
только для быстрого тестирования консоли...
Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { try { Thread.sleep(200); System.out.println("Shouting down ..."); //some cleaning up code... } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });
Comments