logo

Java Daemon-tråd

En daemon-tråd er en bakgrunnstråd med lav prioritet som ikke hindrer JVM-en i å avslutte når programmet fullfører kjøringen

  • Daemon-tråder kjører i bakgrunnen for å støtte brukertråder.
  • JVM avsluttes automatisk når alle brukertråder (ikke-demoner) fullføres.
  • De er opprettet med den samme trådklassen, men er merket som daemon ved hjelp av setDaemon(true)-metoden.
  • SetDaemon(true)-metoden må kalles før tråden starter.
  • Vanlige eksempler inkluderer Garbage Collector og Finalizer Thread.

Syntaks

Java
thread.setDaemon(true); 

Brukssaker

  1. Søppeloppsamling: Garbage Collector (GC) i Java kjører som en demon-tråd.
  2. Bakgrunnsovervåking: Daemon-tråder kan overvåke tilstanden til applikasjonskomponentressurser eller tilkoblinger.
  3. Logging og revisjonstjenester: Daemon-tråder kan brukes til å logge bakgrunnsaktiviteter kontinuerlig.
  4. Oppryddingsoperasjoner: Daemon-tråder kan med jevne mellomrom tømme midlertidige filer frigi ubrukte ressurser eller utføre cache-opprydding.
  5. Planlegger eller tidtakeroppgaver: Bakgrunnsplanleggere bruker ofte daemon-tråder for å utløse oppgaver med faste intervaller.

Metoder som brukes

  • void setDaemon(boolsk på): Merker en tråd som demon eller brukertråd. Må kalles før start().
  • boolsk erDaemon(): Sjekker om en tråd er demon.

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

Produksjon
Daemon thread running... User thread running... 

Oppførselen til Daemon-tråden

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

Produksjon
Main (user) thread ends... 

JVM avsluttes umiddelbart etter at hovedtråden er ferdig, selv om demon-tråden fortsatt kjører.

Viktige merknader

  • En tråd arver demonstatusen til tråden som oppretter den.
  • Metoden setDaemon(true) kaster IllegalThreadStateException hvis den kalles etter start().
  • Daemon-tråder skal ikke brukes til oppgaver som krever fullføring, for eksempel skriving til en fil eller oppdatering av en database.
  • JVM avslutter alle daemon-tråder brått uten å utføre oppryddingsoperasjoner.

Forskjellen mellom brukertråd og Daemon-tråd

BasisBrukertrådDemon-tråd
HensiktUtfører hovedapplikasjonsoppgaverUtfører bakgrunnstjenester
LivssyklusHolder JVM i live til den er ferdigAvsluttes når alle brukertråder er ferdige
PrioritetVanligvis høyereVanligvis lavere
Avslutt JVMJVM venter på ferdigstillelseJVM avsluttes selv om den kjører
EksemplerHovedtråd arbeidstråderSøppelsamler bakgrunnsmonitorer
Lag quiz