En demon-tråd är en bakgrundstråd med låg prioritet som inte hindrar JVM från att avslutas när programmet slutar köras
- Daemon-trådar körs i bakgrunden för att stödja användartrådar.
- JVM avslutas automatiskt när alla användartrådar (icke-daemon) slutförs.
- De skapas med samma trådklass men är markerade som demoner med metoden setDaemon(true).
- Metoden setDaemon(true) måste anropas innan tråden startar.
- Vanliga exempel inkluderar Garbage Collector och Finalizer Thread.
Syntax
Javathread.setDaemon(true);
Användningsfall
- Sophämtning: Garbage Collector (GC) i Java körs som en demon-tråd.
- Bakgrundsövervakning: Daemon-trådar kan övervaka tillståndet för programkomponenternas resurser eller anslutningar.
- Loggnings- och revisionstjänster: Daemon-trådar kan användas för att logga bakgrundsaktiviteter kontinuerligt.
- Rengöringsåtgärder: Daemon-trådar kan med jämna mellanrum rensa temporära filer som släpper oanvända resurser eller utför cacherensning.
- Schemaläggare eller timeruppgifter: Bakgrundsschemaläggare använder ofta demontrådar för att utlösa uppgifter med fasta intervall.
Använda metoder
- void setDaemon(boolean på): Markerar en tråd som demon eller användartråd. Måste anropas före start().
- boolesk isDaemon(): Kontrollerar om en tråd är demon.
Skapa 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...
Demonstrådens beteende
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 avslutas omedelbart efter att huvudtråden avslutats även om demontråden fortfarande körs.
Viktiga anmärkningar
- En tråd ärver demonstatusen för tråden som skapar den.
- Metoden setDaemon(true) kastar IllegalThreadStateException om den anropas efter start().
- Daemon-trådar ska inte användas för uppgifter som kräver slutförande, som att skriva till en fil eller uppdatera en databas.
- JVM avslutar alla demontrådar abrupt utan att utföra rensningsåtgärder.
Skillnaden mellan användartråd och Daemon-tråd
| Grund | Användartråd | Demonstråd |
|---|---|---|
| Ändamål | Utför huvudapplikationsuppgifter | Utför bakgrundstjänster |
| Livscykel | Håller JVM vid liv tills det är klart | Avslutas när alla användartrådar avslutas |
| Prioritet | Vanligtvis högre | Vanligtvis lägre |
| JVM Avsluta | JVM väntar på färdigställande | JVM avslutas även om den körs |
| Exempel | Huvudtråd arbetartrådar | Bakgrundsbildskärmar för sophämtare |