logo

Vlákno Java Daemon

Vlákno démona je vlákno na pozadí s nízkou prioritou, které nebrání JVM v ukončení, když program dokončí provádění.

  • Vlákna démonů běží na pozadí a podporují uživatelská vlákna.
  • JVM se automaticky ukončí po dokončení všech uživatelských (jiných než démonů) vláken.
  • Jsou vytvořeny pomocí stejné třídy Thread, ale jsou označeny jako démon pomocí metody setDaemon(true).
  • Před spuštěním vlákna musí být zavolána metoda setDaemon(true).
  • Mezi běžné příklady patří Garbage Collector a Finalizer Thread.

Syntax

Java
thread.setDaemon(true); 

Případy použití

  1. Odvoz odpadu: Garbage Collector (GC) v Javě běží jako vlákno démona.
  2. Sledování na pozadí: Vlákna démonů mohou monitorovat stav prostředků nebo připojení komponent aplikace.
  3. Logovací a auditorské služby: Vlákna démonů lze použít k průběžnému protokolování aktivit na pozadí.
  4. Úklidové operace: Vlákna démonů mohou pravidelně čistit dočasné soubory, uvolňovat nepoužívané prostředky nebo provádět čištění mezipaměti.
  5. Úlohy plánovače nebo časovače: Plánovače na pozadí často používají vlákna démona ke spouštění úloh v pevných intervalech.

Použité metody

  • void setDaemon (logická hodnota zapnuta): Označí vlákno jako démon nebo uživatelské vlákno. Musí být voláno před start().
  • boolean isDaemon(): Zkontroluje, zda je vlákno démonem.

Vytvoření démonového vlákna

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();  } } 

Výstup
Daemon thread running... User thread running... 

Chování démonického vlákna

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...');  } } 

Výstup
Main (user) thread ends... 

JVM skončí okamžitě po dokončení hlavního vlákna, i když vlákno démona stále běží.

Důležité poznámky

  • Vlákno zdědí stav démona vlákna, které jej vytváří.
  • Metoda setDaemon(true) vyvolá výjimku IllegalThreadStateException, pokud je zavolána po start().
  • Vlákna démonů by se neměla používat pro úlohy vyžadující dokončení, jako je zápis do souboru nebo aktualizace databáze.
  • JVM náhle ukončí všechna vlákna démona bez provedení operací čištění.

Rozdíl mezi uživatelským vláknem a démonovým vláknem

ZákladUživatelské vláknoDémonské vlákno
ÚčelProvádí hlavní aplikační úlohyProvádí služby na pozadí
Životní cyklusUdržuje JVM naživu až do dokončeníUkončí se, když skončí všechna uživatelská vlákna
PřednostObvykle vyššíObvykle nižší
Konec JVMJVM čeká na dokončeníJVM se ukončí, i když běží
PříkladyPracovní vlákna hlavního vláknaGarbage collector pozadí monitory
Vytvořit kvíz