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
Javathread.setDaemon(true);
Käyttötapaukset
- Jätekeräys: Javan roskienkerääjä (GC) toimii demon-säietenä.
- Taustavalvonta: Daemon-säikeet voivat valvoa sovelluskomponenttien resurssien tai yhteyksien tilaa.
- Hakkuu- ja auditointipalvelut: Daemon-säikeitä voidaan käyttää taustatoimintojen kirjaamiseen jatkuvasti.
- Siivoustoimenpiteet: Daemon-säikeet voivat ajoittain tyhjentää väliaikaiset tiedostot vapauttaa käyttämättömiä resursseja tai suorittaa välimuistin puhdistusta.
- 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
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(); } }
Lähtö
Daemon thread running... User thread running...
Daemon Threadin käyttäytyminen
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...'); } }
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ä
| Perusta | Käyttäjän ketju | Daemon Thread |
|---|---|---|
| Tarkoitus | Suorittaa tärkeimmät sovellustehtävät | Suorittaa taustapalveluita |
| Elinkaari | Pitää JVM:n hengissä, kunnes se on valmis | Päättyy, kun kaikki käyttäjäketjut ovat päättyneet |
| Prioriteetti | Yleensä korkeampi | Yleensä alhaisempi |
| JVM poistu | JVM odottaa valmistumista | JVM poistuu, vaikka se olisi käynnissä |
| Esimerkkejä | Päälangan työntekijälangat | Roskakeräimen taustanäytöt |