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
Javathread.setDaemon(true);
Brukssaker
- Søppeloppsamling: Garbage Collector (GC) i Java kjører som en demon-tråd.
- Bakgrunnsovervåking: Daemon-tråder kan overvåke tilstanden til applikasjonskomponentressurser eller tilkoblinger.
- Logging og revisjonstjenester: Daemon-tråder kan brukes til å logge bakgrunnsaktiviteter kontinuerlig.
- Oppryddingsoperasjoner: Daemon-tråder kan med jevne mellomrom tømme midlertidige filer frigi ubrukte ressurser eller utføre cache-opprydding.
- 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
Javapublic 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
Javapublic 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
| Basis | Brukertråd | Demon-tråd |
|---|---|---|
| Hensikt | Utfører hovedapplikasjonsoppgaver | Utfører bakgrunnstjenester |
| Livssyklus | Holder JVM i live til den er ferdig | Avsluttes når alle brukertråder er ferdige |
| Prioritet | Vanligvis høyere | Vanligvis lavere |
| Avslutt JVM | JVM venter på ferdigstillelse | JVM avsluttes selv om den kjører |
| Eksempler | Hovedtråd arbeidstråder | Søppelsamler bakgrunnsmonitorer |