Nit demona je nit v ozadju z nizko prioriteto, ki ne prepreči izhoda JVM, ko program konča izvajanje
- Daemon niti delujejo v ozadju za podporo uporabniških niti.
- JVM se samodejno izklopi, ko se končajo vse uporabniške (ne-demonske) niti.
- Ustvarjeni so z uporabo istega razreda Thread, vendar so označeni kot demon z uporabo metode setDaemon(true).
- Metodo setDaemon(true) je treba poklicati, preden se nit zažene.
- Pogosti primeri so Garbage Collector in Finalizer Thread.
Sintaksa
Javathread.setDaemon(true);
Primeri uporabe
- Odvoz smeti: Zbiralnik smeti (GC) v Javi deluje kot demonska nit.
- Spremljanje ozadja: Niti Daemon lahko spremljajo stanje virov ali povezav aplikacijskih komponent.
- Storitve beleženja in revizije: Daemon niti se lahko uporabljajo za neprekinjeno beleženje dejavnosti v ozadju.
- Čiščenje: Daemon niti lahko občasno počistijo začasne datoteke, sprostijo neuporabljene vire ali izvedejo čiščenje predpomnilnika.
- Naloge razporejevalnika ali časovnika: Načrtovalci v ozadju pogosto uporabljajo demonske niti za sprožitev opravil v določenih intervalih.
Uporabljene metode
- void setDaemon(boolean on): Označi nit kot demonsko ali uporabniško nit. Poklicati ga je treba pred start().
- boolean isDaemon(): Preveri, ali je nit demon.
Ustvarjanje demonske niti
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(); } }
Izhod
Daemon thread running... User thread running...
Vedenje 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...'); } }
Izhod
Main (user) thread ends...
JVM se konča takoj po zaključku glavne niti, čeprav se demonska nit še vedno izvaja.
Pomembne opombe
- Nit podeduje status demona niti, ki jo ustvari.
- Metoda setDaemon(true) vrže izjemo IllegalThreadStateException, če je poklicana po start().
- Daemon niti se ne smejo uporabljati za naloge, ki zahtevajo dokončanje, kot je pisanje v datoteko ali posodabljanje baze podatkov.
- JVM nenadoma prekine vse demonske niti, ne da bi izvedel operacije čiščenja.
Razlika med uporabniško nitjo in demonsko nitjo
| Osnova | Uporabniška nit | Daemon Thread |
|---|---|---|
| Namen | Izvaja glavne naloge aplikacije | Izvaja storitve v ozadju |
| življenjski cikel | Ohranja JVM pri življenju, dokler ni končan | Konča se, ko se končajo vse uporabniške niti |
| Prioriteta | Običajno višje | Ponavadi nižje |
| Izhod JVM | JVM čaka na dokončanje | JVM zapusti, tudi če teče |
| Primeri | Delovne niti glavne niti | Monitorji v ozadju zbiralnika smeti |