logo

Java Daemon Thread

Демон нишката е фонова нишка с нисък приоритет, която не пречи на JVM да излезе, когато програмата завърши изпълнението

  • Демон нишките работят във фонов режим, за да поддържат потребителски нишки.
  • JVM излиза автоматично, когато всички потребителски (не-демон) нишки завършат.
  • Те се създават с помощта на същия клас Thread, но се маркират като демон с помощта на метода setDaemon(true).
  • Методът setDaemon(true) трябва да бъде извикан преди нишката да започне.
  • Често срещаните примери включват Garbage Collector и Finalizer Thread.

Синтаксис

Java
thread.setDaemon(true); 

Случаи на употреба

  1. Събиране на отпадъци: Garbage Collector (GC) в Java работи като демон нишка.
  2. Фоново наблюдение: Демон нишките могат да наблюдават състоянието на ресурсите или връзките на компонентите на приложението.
  3. Услуги за регистрация и одит: Демон нишките могат да се използват за непрекъснато регистриране на фонови дейности.
  4. Операции за почистване: Нишките на Daemon могат периодично да изчистват временни файлове, освобождавайки неизползвани ресурси или извършвайки почистване на кеша.
  5. Задачи за планиране или таймер: Планировчиците на заден план често използват нишки на демон, за да задействат задачи на фиксирани интервали.

Използвани методи

  • void setDaemon (булева стойност на): Маркира нишка като демон или потребителска нишка. Трябва да се извика преди start().
  • boolean isDaemon(): Проверява дали нишката е демон.

Създаване на Daemon Thread

Java
public class DaemonExample extends Thread {  public void run() {  if (Thread.currentThread().isDaemon()) {  System.out.println('Daemon thread running...');  } else {  System.out.println('User thread running...');  }  }  public static void main(String[] args) {  DaemonExample t1 = new DaemonExample();  DaemonExample t2 = new DaemonExample();  t1.setDaemon(true); // must be set before start()  t1.start();  t2.start();  } } 

Изход
Daemon thread running... User thread running... 

Поведение на Daemon Thread

Java
public class DaemonBehavior extends Thread {  public void run() {  while (true) {  System.out.println('Daemon thread running...');  }  }  public static void main(String[] args) {  DaemonBehavior t = new DaemonBehavior();  t.setDaemon(true);  t.start();  System.out.println('Main (user) thread ends...');  } } 

Изход
Main (user) thread ends... 

JVM приключва веднага след приключване на основната нишка, въпреки че нишката демон все още работи.

Важни бележки

  • Нишката наследява състоянието на демон на нишката, която я създава.
  • Методът setDaemon(true) хвърля IllegalThreadStateException, ако бъде извикан след start().
  • Нишките на Daemon не трябва да се използват за задачи, изискващи завършване, като писане във файл или актуализиране на база данни.
  • JVM прекратява внезапно всички нишки на демон, без да извършва операции за почистване.

Разлика между потребителска нишка и демон нишка

ОсноваПотребителска темаDaemon Thread
ЦелИзпълнява основните задачи на приложениетоИзвършва фонови услуги
Жизнен цикълПоддържа JVM жива, докато приключиПрекратява, когато всички потребителски нишки завършат
ПриоритетОбикновено по-високаОбикновено по-ниска
Изход от JVMJVM чака завършванеJVM излиза, дори ако работи
ПримериРаботни нишки на основната нишкаФонови монитори за събирач на отпадъци
Създаване на тест