Как долго JVM разрешает запуск перехватчиков отключения до вызова halt? - PullRequest
2 голосов
/ 29 декабря 2011

Продолжение предыдущего вопроса

Если вы читали предыдущий вопрос, альтернативный заголовок может быть:
Как часто мой демон должен проверять, не прерван ли он?

Ответы [ 2 ]

5 голосов
/ 29 декабря 2011

Когда JVM получает сигнал о выходе, он запускает процесс завершения работы, который запускает все потоки обработчика отключения и затем ожидает их завершения. ОС должна решить, как долго ждать, и это зависит от метода, используемого для инициирования завершения процесса. Вы можете попробовать это сами с помощью простой тестовой программы, например:

public static void main ( String[] args ) throws InterruptedException {
    Runtime.getRuntime ().addShutdownHook ( new Thread () {
        @Override
        public void run () {
            System.out.println ( "Shutdown hook" );
            while ( true ) { }
        }
    } );

    while ( true ) {
        System.out.println ( "Looping" );
        Thread.sleep ( 10000 );
    }
}

Если вы сигнализируете процесс с помощью ctrl + c, процесс запустит ловушку завершения работы, но никогда не завершится. Если вы удалите занятую петлю из ловушки отключения, вы увидите, что она завершится после завершения ловушки.

2 голосов
/ 29 декабря 2011

JVM выполняет выключение. Время отсрочки зависит от операционной системы и AFAIK. У нас нет контроля для настройки этого.

...