logo

Java Daemon Thread

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

Java
thread.setDaemon(true); 

Slučajevi upotrebe

  1. Odvoz smeća: Skupljač smeća (GC) u Javi radi kao demonska nit.
  2. Praćenje pozadine: Daemon niti mogu nadzirati stanje resursa ili veza aplikacijskih komponenti.
  3. Usluge zapisivanja i revizije: Daemon niti se mogu koristiti za kontinuirano bilježenje pozadinskih aktivnosti.
  4. Operacije čišćenja: Daemon niti mogu povremeno brisati privremene datoteke oslobađajući neiskorištene resurse ili obavljati čišćenje predmemorije.
  5. 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

Java
public 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

Java
public 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

OsnovaKorisnička nitDaemon Thread
SvrhaIzvršava glavne zadatke aplikacijeObavlja pozadinske usluge
Životni ciklusOdržava JVM živim dok ne završiZavršava kada završe sve korisničke niti
PrioritetObično višiObično niže
JVM IzlazJVM čeka završetakJVM izlazi čak i ako radi
PrimjeriRadničke niti glavne nitiPozadinski monitori skupljača smeća
Napravi kviz