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
Javathread.setDaemon(true);
Brug Cases
- Affaldsopsamling: Garbage Collector (GC) i Java kører som en dæmontråd.
- Baggrundsovervågning: Daemon-tråde kan overvåge tilstanden af applikationskomponentressourcer eller forbindelser.
- Logføring og revisionstjenester: Daemon-tråde kan bruges til at logge baggrundsaktiviteter kontinuerligt.
- Oprydningsoperationer: Daemon-tråde kan med jævne mellemrum rydde midlertidige filer frigive ubrugte ressourcer eller udføre cache-oprydning.
- 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
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(); } }
Produktion
Daemon thread running... User thread running...
Opførsel af Daemon Thread
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...'); } }
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
| Basis | Brugertråd | Dæmon tråd |
|---|---|---|
| Formål | Udfører hovedapplikationsopgaver | Udfører baggrundstjenester |
| Livscyklus | Holder JVM i live, indtil den er færdig | Slutter, når alle brugertråde er færdige |
| Prioritet | Normalt højere | Normalt lavere |
| JVM Afslut | JVM venter på færdiggørelse | JVM afsluttes, selvom den kører |
| Eksempler | Hovedtråd arbejdstråde | Baggrundsmonitorer til affaldsopsamler |