РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1004 of 1163 menu

Метод setDaemon

Метод setDaemon класса Thread помечает поток как демон-поток или, наоборот, как обычный поток пользователя. В первый параметр мы передаем логическое значение: true - если поток должен стать демоном, false - если поток должен быть обычным потоком пользователя. Демон-потоки автоматически завершаются, когда в программе не остается ни одного обычного (не демон) потока.

Вызывать метод setDaemon можно только до запуска потока, то есть до вызова метода start. Если поток уже запущен, метод выбросит исключение IllegalThreadStateException. По умолчанию новый поток является обычным потоком пользователя, то есть демоном не является.

Синтаксис

thread.setDaemon(boolean on)

Пример

Давайте создадим поток, сделаем его демоном и проверим его статус:

public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("Daemon thread is running"); }); thread.setDaemon(true); thread.start(); System.out.println(thread.isDaemon()); } }

Результат выполнения кода:

"true" "Daemon thread is running"

Пример

Давайте посмотрим, что произойдет, если попытаться сделать поток демоном после его запуска:

public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("Thread is running"); }); thread.start(); try { thread.setDaemon(true); } catch (IllegalThreadStateException e) { System.out.println("Cannot set daemon after start"); } } }

Результат выполнения кода:

"Thread is running" "Cannot set daemon after start"

Пример

Давайте сделаем демон-поток, который будет выводить сообщения, и убедимся, что он завершится вместе с основным потоком:

public class Main { public static void main(String[] args) { Thread daemon = new Thread(() -> { while (true) { System.out.println("Daemon is working"); } }); daemon.setDaemon(true); daemon.start(); System.out.println("Main thread is finishing"); } }

Результат выполнения кода:

"Main thread is finishing"

Смотрите также

  • метод isDaemon,
    который проверяет, является ли поток демоном
  • метод start,
    который запускает поток на выполнение
  • метод join,
    который ожидает завершения потока
  • метод isAlive,
    который проверяет, жив ли поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить