Работают ли Java-исполнители в потоке демонов? - PullRequest
0 голосов
/ 13 сентября 2018

У меня была короткая Java-программа, которая создала одного запланированного исполнителя потока, и я запланировал задачу.

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();

scheduledExecutorService.schedule(cloudWatchReporter, accumulateForMillis, TimeUnit.MILLISECONDS);

До наступления запланированного времени мой основной поток завершился и JVM вышла.Я ожидал, что он дождется завершения таймера и выполнения запланированной задачи перед тем, как завершить работу.Это не то, что случилось.Если я добавлю достаточный сон перед тем, как закончится мой основной поток, моя задача будет выполняться до выключения JVM.

Есть ли у исполнителя основной поток, который управляет таймером?Или эффект таймера достигается другим способом?Если он управляется каким-либо главным потоком, является ли он потоком демона или потоком, не являющимся демоном?

1 Ответ

0 голосов
/ 13 сентября 2018

Этот простой полный пример противоречит тому, что вы утверждаете в своем вопросе:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

class Test {

    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.schedule(() -> System.out.println("hello"), 10, TimeUnit.SECONDS);
    }
}

Запустите его, и вы увидите, что через 10 секунд печатается не только сообщение, но и программа не закрывается. Так что ваш основной поток не просто закончился. Вы, вероятно, звоните System.exit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...