web-dev-qa-db-fra.com

Quelle est la différence entre le fil de l'utilisateur et le fil de démon dans Java?

Dupliquer possible:
[.____] Qu'est-ce que le fil de démon en Java
[.____] Quand les fils de démon sont-ils utiles?

Je suis confondu avec la différence entre les threads utilisateur et les fils de démon dans Java.

Peux tu me dire:

  1. Quelle est la différence entre les threads utilisateur et les fils de démon dans Java?
  2. Dans quelle situation le fil de démon sera utilisé? Pouvez-vous me donner quelques exemples?
22
lichengwu

un JVM va quitter une fois que le dernier fil non JVM se termine. Cela signifie que si l'un des threads que vous créez est toujours en cours d'exécution, le JVM ne sera pas arrêté. Les fils de démon sont des threads qui n'empêchent pas la JVM de se fermer. Normalement, vous les utiliseriez pour certaines tâches de fond que vous ne voulez pas conserver votre application si l'utilisateur le demandait de s'éteindre.

en outre, votre question a déjà été posée (et répondit) ici - Qu'est-ce que le fil de démon en Java?

certains points communs (d'expérience personnelle) utilisent des cas pour les threads du démon pourrait inclure

  • fils de fond qui interrogez des systèmes distants pour les changements d'état
  • filtres de travail de fond (des choses comme envoi des notifications par courrier électronique, SNMP, peu importe)
  • fils de minuterie personnalisés destinés à effectuer une maintenance planifiée
20
radai

2ème question :

Les fils de démon sont terminés automatiquement lorsque tous les fils normaux ont été résiliés.

Vous pouvez utiliser des fils de démon pour faire du ménage ou le nettoyage de votre application. Les fils de démon sont utilisés pour les tâches de support arrière-plan et ne sont nécessaires que lorsque des fils normaux sont en cours d'exécution. Le fil GC est un fil de démon.

4
rai.skumar

Un thread utilisateur est un fil créé par l'application (utilisateur) et, dans la plupart des cas, un thread de démon est créé par Java VM pour servir les threads de l'utilisateur. Le VM est différencié entre les threads, l'utilisateur ou le démon, lorsqu'un fil d'utilisateur sort. Dans le cas où un thread d'utilisateur sort, le VM vérifiera pour déterminer s'il y a un autre threads utilisateur en cours d'exécution. S'il y a-t-il planifiera le prochain thread (utilisateur ou démon). S'il n'y a pas d'autres threads utilisateur en cours d'exécution, seuls les filets de démon, cette instance de VM quitte également.

La différence entre ces deux types de threads est simple: si l'heure d'exécution Java détermine que les seuls threads exécutés dans une application sont des threads de démon (c.-à-d. Il n'y a pas de filetage utilisateur existant) le temps d'exécution Java Fermeture de l'application, arrêtant efficacement toutes les fils de démon morts dans leurs pistes. Pour qu'une application continue à fonctionner, elle doit toujours avoir au moins un fil d'utilisateur en direct. Dans tous les autres égards, le temps d'exécution Java traite des threads de démon et des threads de l'utilisateur exactement de la même manière.

1
code_fish