logo

Java démon szál

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

Java
thread.setDaemon(true); 

Használati esetek

  1. Szemétgyűjtés: A Java Garbage Collector (GC) démonszálként fut.
  2. Háttérfigyelés: A démonszálak figyelhetik az alkalmazás-összetevők erőforrásainak vagy kapcsolatainak állapotát.
  3. 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.
  4. 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.
  5. Ü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

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

Kimenet
Daemon thread running... User thread running... 

A Daemon Thread viselkedése

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

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

AlapFelhasználói szálDaemon Thread
CélVégrehajtja a fő alkalmazási feladatokatHáttérszolgáltatásokat végez
ÉletciklusÉletben tartja a JVM-et a befejezésigLeáll, amikor az összes felhasználói szál befejeződik
PrioritásÁltalában magasabbÁltalában alacsonyabb
JVM kilépésA JVM a befejezésre várA JVM akkor is kilép, ha fut
PéldákFőszál dolgozó szálakSzemétgyűjtő háttér monitorok
Kvíz létrehozása