Возможно, вы захотите заглянуть в ловушку отключения. По сути, вы можете зарегистрировать незапущенный поток, он будет запущен JVM при запуске процесса выхода.
Runtime.getRuntime().addShutdownHook(thread)
Согласно документу:
Виртуальная машина Java отключается в ответ на два вида событий:
- Программа завершается нормально, когда завершается последний поток, не являющийся демоном, или когда вызывается метод выхода (эквивалентно System.exit), или
- Виртуальная машина прерывается в ответ на пользовательское прерывание, такое как ввод ^ C, или общесистемное событие, такое как выход пользователя из системы или выключение системы.