logo

Java Daemon Thread

Daemon-säie on matalan prioriteetin taustasäie, joka ei estä JVM:ää poistumasta, kun ohjelma lopettaa suorituksen

  • Daemon-säikeet toimivat taustalla tukemaan käyttäjäsäikeitä.
  • JVM poistuu automaattisesti, kun kaikki käyttäjän (ei-daemonin) säikeet ovat valmiit.
  • Ne luodaan käyttämällä samaa säieluokkaa, mutta ne on merkitty demoniksi setDaemon(true)-metodilla.
  • Metodi setDaemon(true) on kutsuttava ennen säikeen alkamista.
  • Yleisiä esimerkkejä ovat Garbage Collector ja Finalizer Thread.

Syntaksi

Java
thread.setDaemon(true); 

Käyttötapaukset

  1. Jätekeräys: Javan roskienkerääjä (GC) toimii demon-säietenä.
  2. Taustavalvonta: Daemon-säikeet voivat valvoa sovelluskomponenttien resurssien tai yhteyksien tilaa.
  3. Hakkuu- ja auditointipalvelut: Daemon-säikeitä voidaan käyttää taustatoimintojen kirjaamiseen jatkuvasti.
  4. Siivoustoimenpiteet: Daemon-säikeet voivat ajoittain tyhjentää väliaikaiset tiedostot vapauttaa käyttämättömiä resursseja tai suorittaa välimuistin puhdistusta.
  5. Ajastin- tai ajastintehtävät: Taustaajastajat käyttävät usein daemon-säikeitä käynnistämään tehtäviä tietyin väliajoin.

Käytetyt menetelmät

  • void setDaemon(boolean päällä): Merkitsee säiettä demoniksi tai käyttäjäsäikeeksi. On kutsuttava ennen start().
  • boolean isDaemon(): Tarkistaa, onko säiettä demoni.

Daemon-ketjun luominen

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

Lähtö
Daemon thread running... User thread running... 

Daemon Threadin käyttäytyminen

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

Lähtö
Main (user) thread ends... 

JVM päättyy heti pääsäikeen päättymisen jälkeen, vaikka demonsäie on edelleen käynnissä.

Tärkeitä huomautuksia

  • Säie perii sen luoneen säikeen demonin tilan.
  • Metodi setDaemon(true) heittää IllegalThreadStateExceptionin, jos sitä kutsutaan start() jälkeen.
  • Daemon-säikeitä ei tule käyttää suorittamista vaativiin tehtäviin, kuten tiedostoon kirjoittamiseen tai tietokannan päivittämiseen.
  • JVM lopettaa kaikki daemon-säikeet äkillisesti suorittamatta puhdistustoimenpiteitä.

Ero käyttäjäsäikeen ja daemon-säikeen välillä

PerustaKäyttäjän ketjuDaemon Thread
TarkoitusSuorittaa tärkeimmät sovellustehtävätSuorittaa taustapalveluita
ElinkaariPitää JVM:n hengissä, kunnes se on valmisPäättyy, kun kaikki käyttäjäketjut ovat päättyneet
PrioriteettiYleensä korkeampiYleensä alhaisempi
JVM poistuJVM odottaa valmistumistaJVM poistuu, vaikka se olisi käynnissä
EsimerkkejäPäälangan työntekijälangatRoskakeräimen taustanäytöt
Luo tietokilpailu