logo

Fil de discussion du démon Java

Un thread démon est un thread d'arrière-plan de faible priorité qui n'empêche pas la JVM de se fermer une fois l'exécution du programme terminée.

  • Les threads démons s'exécutent en arrière-plan pour prendre en charge les threads utilisateur.
  • La JVM se ferme automatiquement lorsque tous les threads utilisateur (non démons) sont terminés.
  • Ils sont créés à l'aide de la même classe Thread mais sont marqués comme démon à l'aide de la méthode setDaemon(true).
  • La méthode setDaemon(true) doit être appelée avant le démarrage du thread.
  • Les exemples courants incluent Garbage Collector et Finalizer Thread.

Syntaxe

Java
thread.setDaemon(true); 

Cas d'utilisation

  1. Collecte des déchets : Le Garbage Collector (GC) en Java s'exécute comme un thread démon.
  2. Surveillance en arrière-plan : Les threads démons peuvent surveiller l’état des ressources ou des connexions des composants d’application.
  3. Services de journalisation et d'audit : Les threads démons peuvent être utilisés pour enregistrer les activités en arrière-plan en continu.
  4. Opérations de nettoyage : Les threads démons peuvent périodiquement effacer les fichiers temporaires, libérer les ressources inutilisées ou effectuer un nettoyage du cache.
  5. Tâches du planificateur ou du minuteur : Les planificateurs en arrière-plan utilisent souvent des threads démons pour déclencher des tâches à intervalles fixes.

Méthodes utilisées

  • void setDaemon (booléen sur): Marque un thread comme démon ou thread utilisateur. Doit être appelé avant start().
  • booléen isDaemon() : Vérifie si un thread est un démon.

Création d'un fil de discussion démon

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

Sortir
Daemon thread running... User thread running... 

Comportement du fil démon

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

Sortir
Main (user) thread ends... 

La JVM se termine immédiatement après la fin du thread principal, même si le thread démon est toujours en cours d'exécution.

Remarques importantes

  • Un thread hérite du statut de démon du thread qui le crée.
  • La méthode setDaemon(true) lève IllegalThreadStateException si elle est appelée après start().
  • Les threads démon ne doivent pas être utilisés pour des tâches nécessitant une exécution telles que l'écriture dans un fichier ou la mise à jour d'une base de données.
  • JVM met fin brusquement à tous les threads démons sans effectuer d'opérations de nettoyage.

Différence entre le thread utilisateur et le thread démon

BaseSujet d'utilisateurFil de démon
ButExécute les principales tâches de l'applicationEffectue des services d’arrière-plan
Cycle de vieMaintient la JVM en vie jusqu'à la finSe termine lorsque tous les threads utilisateur sont terminés
PrioritéGénéralement plus élevéGénéralement inférieur
Sortie de la JVMJVM attend la finLa JVM se ferme même si elle est en cours d'exécution
ExemplesThreads de travail du thread principalMoniteurs d'arrière-plan pour collecteur de déchets
Créer un quiz