Daemon thread je pozadinska nit niskog prioriteta koja ne sprječava JVM da izađe kada program završi s izvođenjem
- Daemon niti rade u pozadini kako bi podržale korisničke niti.
- JVM se automatski zatvara kada sve korisničke (ne-daemon) niti završe.
- Stvoreni su korištenjem iste klase Thread, ali su označeni kao demon korištenjem metode setDaemon(true).
- Metoda setDaemon(true) mora se pozvati prije pokretanja niti.
- Uobičajeni primjeri uključuju Garbage Collector i Finalizer Thread.
Sintaksa
Javathread.setDaemon(true);
Slučajevi upotrebe
- Odvoz smeća: Skupljač smeća (GC) u Javi radi kao demonska nit.
- Praćenje pozadine: Daemon niti mogu nadzirati stanje resursa ili veza aplikacijskih komponenti.
- Usluge zapisivanja i revizije: Daemon niti se mogu koristiti za kontinuirano bilježenje pozadinskih aktivnosti.
- Operacije čišćenja: Daemon niti mogu povremeno brisati privremene datoteke oslobađajući neiskorištene resurse ili obavljati čišćenje predmemorije.
- Zadaci planera ili mjerača vremena: Pozadinski planeri često koriste demonske niti za pokretanje zadataka u fiksnim intervalima.
Korištene metode
- void setDaemon(boolean on): Označava nit kao daemon ili korisničku nit. Mora se pozvati prije start().
- boolean isDaemon(): Provjerava je li nit demon.
Stvaranje Daemon 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(); } }
Izlaz
Daemon thread running... User thread running...
Ponašanje Daemon Threada
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...'); } }
Izlaz
Main (user) thread ends...
JVM završava odmah nakon završetka glavne niti iako demonska nit još uvijek radi.
Važne napomene
- Nit nasljeđuje status demona niti koja ju stvara.
- Metoda setDaemon(true) izbacuje IllegalThreadStateException ako se pozove nakon start().
- Daemon niti se ne smiju koristiti za zadatke koji zahtijevaju dovršetak kao što je pisanje u datoteku ili ažuriranje baze podataka.
- JVM naglo prekida sve demonske niti bez izvođenja operacija čišćenja.
Razlika između korisničke niti i demonske niti
| Osnova | Korisnička nit | Daemon Thread |
|---|---|---|
| Svrha | Izvršava glavne zadatke aplikacije | Obavlja pozadinske usluge |
| Životni ciklus | Održava JVM živim dok ne završi | Završava kada završe sve korisničke niti |
| Prioritet | Obično viši | Obično niže |
| JVM Izlaz | JVM čeka završetak | JVM izlazi čak i ako radi |
| Primjeri | Radničke niti glavne niti | Pozadinski monitori skupljača smeća |