Как создать поток-демон (daemon thread) в Java?

«Как создать поток-демон (daemon thread) в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в Java можно создать поток-демон, установив флаг daemon в true с помощью метода setDaemon() до запуска потока (start()).

Ключевые особенности:

  • Автоматическое завершение: Демон-потоки автоматически завершаются, когда завершаются все обычные (пользовательские) потоки приложения.
  • Назначение: Используются для фоновых задач, не критичных для работы приложения (например, сборка мусора, логирование, мониторинг).
  • Ограничения: JVM не гарантирует выполнение блока finally или корректное завершение демон-потоков при выходе.

Пример создания:

Thread daemonThread = new Thread(() -> {
    while (true) {
        System.out.println("Фоновый демон-поток работает...");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt(); // Восстановление флага прерывания
            break;
        }
    }
});

// Установка флага демона ДО запуска
// Поток по умолчанию НЕ является демоном (isDaemon() == false).
daemonThread.setDaemon(true);
daemonThread.start();