logo

Java Daemon-tråd

En dæmontråd er en baggrundstråd med lav prioritet, der ikke forhindrer JVM i at afslutte, når programmet afslutter eksekveringen

  • Daemon-tråde kører i baggrunden for at understøtte brugertråde.
  • JVM afsluttes automatisk, når alle brugertråde (ikke-dæmoner) er færdige.
  • De er oprettet ved hjælp af den samme Thread-klasse, men er markeret som daemon ved hjælp af setDaemon(true)-metoden.
  • Metoden setDaemon(true) skal kaldes, før tråden starter.
  • Almindelige eksempler omfatter Garbage Collector og Finalizer Thread.

Syntaks

Java
thread.setDaemon(true); 

Brug Cases

  1. Affaldsopsamling: Garbage Collector (GC) i Java kører som en dæmontråd.
  2. Baggrundsovervågning: Daemon-tråde kan overvåge tilstanden af ​​applikationskomponentressourcer eller forbindelser.
  3. Logføring og revisionstjenester: Daemon-tråde kan bruges til at logge baggrundsaktiviteter kontinuerligt.
  4. Oprydningsoperationer: Daemon-tråde kan med jævne mellemrum rydde midlertidige filer frigive ubrugte ressourcer eller udføre cache-oprydning.
  5. Planlægnings- eller timeropgaver: Baggrundsplanlæggere bruger ofte daemon-tråde til at udløse opgaver med faste intervaller.

Anvendte metoder

  • void setDaemon(boolean on): Markerer en tråd som dæmon eller brugertråd. Skal kaldes før start().
  • boolsk er Daemon(): Kontrollerer, om en tråd er dæmon.

Oprettelse af en Daemon-tråd

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

Produktion
Daemon thread running... User thread running... 

Opførsel af 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...');  } } 

Produktion
Main (user) thread ends... 

JVM slutter umiddelbart efter hovedtråden er færdig, selvom dæmontråden stadig kører.

Vigtige bemærkninger

  • En tråd arver dæmonstatus for den tråd, der opretter den.
  • Metoden setDaemon(true) kaster IllegalThreadStateException, hvis den kaldes efter start().
  • Daemon-tråde bør ikke bruges til opgaver, der kræver fuldførelse, såsom skrivning til en fil eller opdatering af en database.
  • JVM afslutter alle dæmontråde brat uden at udføre oprydningsoperationer.

Forskellen mellem brugertråd og Daemon-tråd

BasisBrugertrådDæmon tråd
FormålUdfører hovedapplikationsopgaverUdfører baggrundstjenester
LivscyklusHolder JVM i live, indtil den er færdigSlutter, når alle brugertråde er færdige
PrioritetNormalt højereNormalt lavere
JVM AfslutJVM venter på færdiggørelseJVM afsluttes, selvom den kører
EksemplerHovedtråd arbejdstrådeBaggrundsmonitorer til affaldsopsamler
Opret quiz