logo

Java Daemon-tråd

En demon-tråd är en bakgrundstråd med låg prioritet som inte hindrar JVM från att avslutas när programmet slutar köras

  • Daemon-trådar körs i bakgrunden för att stödja användartrådar.
  • JVM avslutas automatiskt när alla användartrådar (icke-daemon) slutförs.
  • De skapas med samma trådklass men är markerade som demoner med metoden setDaemon(true).
  • Metoden setDaemon(true) måste anropas innan tråden startar.
  • Vanliga exempel inkluderar Garbage Collector och Finalizer Thread.

Syntax

Java
thread.setDaemon(true); 

Användningsfall

  1. Sophämtning: Garbage Collector (GC) i Java körs som en demon-tråd.
  2. Bakgrundsövervakning: Daemon-trådar kan övervaka tillståndet för programkomponenternas resurser eller anslutningar.
  3. Loggnings- och revisionstjänster: Daemon-trådar kan användas för att logga bakgrundsaktiviteter kontinuerligt.
  4. Rengöringsåtgärder: Daemon-trådar kan med jämna mellanrum rensa temporära filer som släpper oanvända resurser eller utför cacherensning.
  5. Schemaläggare eller timeruppgifter: Bakgrundsschemaläggare använder ofta demontrådar för att utlösa uppgifter med fasta intervall.

Använda metoder

  • void setDaemon(boolean på): Markerar en tråd som demon eller användartråd. Måste anropas före start().
  • boolesk isDaemon(): Kontrollerar om en tråd är demon.

Skapa en Daemon-tråd

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

Produktion
Daemon thread running... User thread running... 

Demonstrådens beteende

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

Produktion
Main (user) thread ends... 

JVM avslutas omedelbart efter att huvudtråden avslutats även om demontråden fortfarande körs.

Viktiga anmärkningar

  • En tråd ärver demonstatusen för tråden som skapar den.
  • Metoden setDaemon(true) kastar IllegalThreadStateException om den anropas efter start().
  • Daemon-trådar ska inte användas för uppgifter som kräver slutförande, som att skriva till en fil eller uppdatera en databas.
  • JVM avslutar alla demontrådar abrupt utan att utföra rensningsåtgärder.

Skillnaden mellan användartråd och Daemon-tråd

GrundAnvändartrådDemonstråd
ÄndamålUtför huvudapplikationsuppgifterUtför bakgrundstjänster
LivscykelHåller JVM vid liv tills det är klartAvslutas när alla användartrådar avslutas
PrioritetVanligtvis högreVanligtvis lägre
JVM AvslutaJVM väntar på färdigställandeJVM avslutas även om den körs
ExempelHuvudtråd arbetartrådarBakgrundsbildskärmar för sophämtare
Skapa frågesport