logo

Java Daemon Thread

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

Java
thread.setDaemon(true); 

Primeri uporabe

  1. Odvoz smeti: Zbiralnik smeti (GC) v Javi deluje kot demonska nit.
  2. Spremljanje ozadja: Niti Daemon lahko spremljajo stanje virov ali povezav aplikacijskih komponent.
  3. Storitve beleženja in revizije: Daemon niti se lahko uporabljajo za neprekinjeno beleženje dejavnosti v ozadju.
  4. Čiščenje: Daemon niti lahko občasno počistijo začasne datoteke, sprostijo neuporabljene vire ali izvedejo čiščenje predpomnilnika.
  5. 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

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();  } } 

Izhod
Daemon thread running... User thread running... 

Vedenje Daemon Thread

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...');  } } 

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

OsnovaUporabniška nitDaemon Thread
NamenIzvaja glavne naloge aplikacijeIzvaja storitve v ozadju
življenjski cikelOhranja JVM pri življenju, dokler ni končanKonča se, ko se končajo vse uporabniške niti
PrioritetaObičajno višjePonavadi nižje
Izhod JVMJVM čaka na dokončanjeJVM zapusti, tudi če teče
PrimeriDelovne niti glavne nitiMonitorji v ozadju zbiralnika smeti
Ustvari kviz