A démonszál egy alacsony prioritású háttérszál, amely nem akadályozza meg a JVM kilépését, amikor a program befejezi a végrehajtást.
- A démonszálak a háttérben futnak a felhasználói szálak támogatására.
- A JVM automatikusan kilép, amikor az összes felhasználói (nem démon) szál befejeződött.
- Ugyanazon Thread osztály használatával jönnek létre, de démonként vannak megjelölve a setDaemon(true) metódussal.
- A setDaemon(true) metódust a szál indítása előtt meg kell hívni.
- Gyakori példák közé tartozik a Garbage Collector és a Finalizer Thread.
Szintaxis
Javathread.setDaemon(true);
Használati esetek
- Szemétgyűjtés: A Java Garbage Collector (GC) démonszálként fut.
- Háttérfigyelés: A démonszálak figyelhetik az alkalmazás-összetevők erőforrásainak vagy kapcsolatainak állapotát.
- Naplózási és auditálási szolgáltatások: A démonszálak a háttértevékenységek folyamatos naplózására használhatók.
- Tisztítási műveletek: A démonszálak időszakonként törölhetik az ideiglenes fájlokat, és felszabadíthatják a fel nem használt erőforrásokat, vagy gyorsítótár-tisztítást hajthatnak végre.
- Ütemező vagy időzítő feladatok: A háttérütemezők gyakran démonszálakat használnak a feladatok meghatározott időközönkénti indítására.
Alkalmazott módszerek
- void setDaemon (boolean be): Megjelöl egy szálat démonként vagy felhasználói szálként. A start() előtt meg kell hívni.
- logikai isDaemon(): Ellenőrzi, hogy egy szál démon-e.
Démonszál létrehozása
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(); } }
Kimenet
Daemon thread running... User thread running...
A Daemon Thread viselkedése
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...'); } }
Kimenet
Main (user) thread ends...
A JVM azonnal véget ér a fő szál befejezése után, bár a démonszál még fut.
Fontos megjegyzések
- A szál örökli az őt létrehozó szál démonállapotát.
- A setDaemon(true) metódus IllegalThreadStateException-t dob, ha a start() után hívja meg.
- A démonszálakat nem szabad befejezést igénylő feladatokhoz, például fájlba íráshoz vagy adatbázis frissítéséhez használni.
- A JVM hirtelen leállítja az összes démonszálat, tisztítási műveletek végrehajtása nélkül.
Különbség a felhasználói szál és a démon szál között
| Alap | Felhasználói szál | Daemon Thread |
|---|---|---|
| Cél | Végrehajtja a fő alkalmazási feladatokat | Háttérszolgáltatásokat végez |
| Életciklus | Életben tartja a JVM-et a befejezésig | Leáll, amikor az összes felhasználói szál befejeződik |
| Prioritás | Általában magasabb | Általában alacsonyabb |
| JVM kilépés | A JVM a befejezésre vár | A JVM akkor is kilép, ha fut |
| Példák | Főszál dolgozó szálak | Szemétgyűjtő háttér monitorok |