ExecutorService с потоками демона - явное завершение работы - PullRequest
0 голосов
/ 11 мая 2018

Если я настроил ExecutorService с ThreadFactory, который порождает потоки демона, мне все равно нужно явно вызывать метод shutdown()?

Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setDaemon(true).build());

1 Ответ

0 голосов
/ 11 мая 2018

Ну, согласно setDaemon,

Виртуальная машина Java завершается, когда все выполняющиеся потоки - все потоки демона.

Поэтому, поскольку вы используете потоки демона, ваш исполнитель не будет препятствовать завершению работы вашего приложения.Но это не значит, что нет причин звонить shutdown.Вы все еще можете запретить отправку каких-либо дополнительных задач в какой-то момент до завершения вашего приложения.


Проверьте его, если хотите: (Я удалил материал с гуавы, но основной принцип тот же)

public static void main(String... args)
{
    final ExecutorService executorService = Executors.newSingleThreadExecutor(r -> {
        final Thread thread = new Thread(r);
        thread.setDaemon(false); //change me
        return thread;
    });
    executorService.submit(() -> { while (true){ System.out.println("busy"); } });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...