logo

Java Daemon Thread

Demono gija yra žemo prioriteto fono gija, kuri netrukdo JVM išeiti, kai programa baigia vykdyti

  • Demonų gijos veikia fone, kad palaikytų vartotojų gijas.
  • JVM automatiškai išeina, kai baigiasi visos vartotojo (ne demono) gijos.
  • Jie sukurti naudojant tą pačią Thread klasę, bet pažymėti kaip demonas naudojant setDaemon(true) metodą.
  • Metodas setDaemon(true) turi būti iškviestas prieš pradedant giją.
  • Įprasti pavyzdžiai yra šiukšlių surinkėjas ir baigiamasis siūlas.

Sintaksė

Java
thread.setDaemon(true); 

Naudojimo atvejai

  1. Šiukšlių surinkimas: „Java“ šiukšlių surinkėjas (GC) veikia kaip demono gija.
  2. Fono stebėjimas: Demono gijos gali stebėti programos komponentų išteklių arba jungčių būseną.
  3. Miško ruošos ir audito paslaugos: Demonų gijos gali būti naudojamos nuolatinei foninei veiklai registruoti.
  4. Valymo operacijos: „Daemon“ gijos gali periodiškai išvalyti laikinuosius failus, išleisti nepanaudotus išteklius arba išvalyti talpyklą.
  5. Planuoklio arba laikmačio užduotys: Fono planuotojai dažnai naudoja demonų gijas, kad suaktyvintų užduotis nustatytais intervalais.

Naudoti metodai

  • void setDaemon (loginis įjungtas): Pažymi giją kaip demoną arba vartotojo giją. Turi būti iškviestas prieš start().
  • loginis isDaemon(): Patikrina, ar gija yra demonas.

Demono gijos kūrimas

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

Išvestis
Daemon thread running... User thread running... 

Daemon Thread elgesys

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

Išvestis
Main (user) thread ends... 

JVM baigiasi iš karto po to, kai baigiasi pagrindinė gija, nors demono gija vis dar veikia.

Svarbios pastabos

  • Gija paveldi ją kuriančios gijos demono būseną.
  • Metodas setDaemon(true) išmeta IllegalThreadStateException, jei iškviečiamas po start().
  • Demonų gijos neturėtų būti naudojamos užduotims, kurias reikia atlikti, pvz., rašyti į failą arba atnaujinti duomenų bazę.
  • JVM staigiai nutraukia visas demono gijas, neatlikdamas valymo operacijų.

Skirtumas tarp vartotojo gijos ir demono gijos

PagrindasVartotojo temaDaemon Thread
TikslasVykdo pagrindines programos užduotisAtlieka fonines paslaugas
Gyvenimo ciklasIšlaiko JVM gyvą, kol baigsisNutrūksta, kai baigiasi visos vartotojo gijos
PirmenybėPaprastai didesnisPaprastai žemesnė
JVM išėjimasJVM laukia pabaigosJVM išeina, net jei veikia
PavyzdžiaiPagrindinių siūlų darbininkų siūlaiŠiukšlių rinktuvo foniniai monitoriai
Sukurti viktoriną