Что происходит, когда JVM прекращается?

Что происходит, когда JVM завершается сSystem.exit(0) или же^C или что-нибудь в этом роде? Я читаю такие вещи, как «процесс просто сдулся» и «каждый отдельный поток остановлен», но я хотел бы знать, что именно происходит. Я уже знаю, что естьshutdownHook это каким-то образом все еще выполняется, но что происходит до того, как будут вызваны shutdownHooks, и произойдет ли что-нибудь после того, как все эти потоки закончатся?

Я хотел бы реализовать такойshutdownHook правильно и для этого мне нужно сделать правильные предположения о том, что еще может быть выполнено, а что нет.

Обновить:

некоторый код:

class SomeObject {

    private boolean stopped;

    SomeObject() {
        stopped = false;
        Thread hook = new Thread() {

            @Override
            public void run() {
                stopped = true;
            }

        };
        hook.setPriority(Thread.MAX_PRIORITY);
        Runtime.getRuntime().addShutdownHook(hook);
    }

    boolean map(Iterator<Object> it) {
        while(it.hasNext() && !stopped) {
            writeToOtherObject(it.next());
            it.remove();
        }
        //have calculations finished?
        return !it.hasNext();
    }
}

map Функция вычисляет результаты, собранные в каком-то другом объекте. Этот объект должен храниться в каком-то файле, прежде чем все будет разбито (по обычному приоритетуshutdownHookс тоже). ЛиshutdownHook здесь имеет смысл? Насколько я понимаю, все потоки уничтожаются в первую очередь и только потомshutdownHookОни запускаются (одновременно, но я предполагаю, что сначала запускаются потоки с высоким приоритетом ...), а затем объекты завершаются. Это делает приведенный выше код довольно бесполезным, потому что цель этогоshutdownHook было бы убедиться, что новый цикл не запускается, когда выключение уже началось. Является ли мое понимание правильным и полным?

Ответы на вопрос(2)

Ваш ответ на вопрос