49 votes

Quand les threads de démon sont-ils utiles ?

Je sais que Deamon threads d’arrière-plan. Nous pouvons créer notre propre thread de démon en appelant `` .

Ma question est la suivante : pourquoi et quand devons-nous créer notre fil en tant que fil de démon ?

65voto

JB Nizet Points 250258

La JVM se ferme lorsque tous les threads en cours d’exécution sont des threads de démon. Alors imaginez que vous écrivez un jeu simple où votre méthode principale tourne en boucle jusqu’à ce que vous décidiez d’arrêter. Et imaginez qu’au début du jeu, vous démarrez un fil de discussion qui sondera sans fin un site Web pour déclencher des alertes. Vous souhaitez que la JVM se ferme lorsque vous décidez de mettre fin au jeu. Vous ne voulez pas que les sondages sans fin empêchent le jeu de se terminer. Vous faites donc de ce thread d’interrogation un thread de démon.

13voto

Snps Points 4082

Un thread Deamon est automatiquement arrêté par la JVM lorsque tous les threads « normaux » sont terminés. Les threads normaux ne sont jamais automatiquement terminés.

6voto

panzerschreck Points 1163

Les services que vous souhaitez offrir à vos consommateurs sans aucune interation d’utilisateur au moyen de threads utilisateur constituent le principal cas d’utilisation pour définir un thread utilisateur en tant que démon.

Par conséquent, jusqu’à ce que les threads utilisateur existent, la JVM garantit que les threads de démon s’exécutent en continu. Vous pouvez trouver des exemples comme GC, UI Thread, etc. ce sont des démons.

J’espère que cela vous aidera.

2voto

M Platvoet Points 1191

Comme d’autres l’ont souligné, un thread de démon n’empêche pas la JVM de se fermer lorsque le programme se termine lorsque ce thread est toujours en cours d’exécution.

En général, vous préférez ne pas créer de fils de démon, sauf si vous êtes absolument certain que le fil n’a pas d’effets secondaires. Comme vous ne pouvez pas savoir quand le thread s’arrête, les blocs de finalisation ne sont pas exécutés et aucune pile n’est déroulée. Essayez donc d’éviter d’utiliser des opérations d’E/S dans les threads de démon, car cela peut corrompre les données.

1voto

AlexR Points 60796

Normalement, le programme se termine lorsque tous ses threads ont quitté leur méthode. Les threads de démon n’empêchent pas le programme de se terminer même s’ils sont toujours en cours d’exécution, c’est-à-dire en cours d’exécution.

Vous devez donc utiliser le thread de démon si vous ne souhaitez pas empêcher l’arrêt du programme lorsque le thread est toujours en cours d’exécution. C’est typique par exemple pour les tâches périodiques de longue durée mais dépend en fait beaucoup de votre programme, de votre conception et de vos goûts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X