Quelqu'un peut-il me dire quels sont les threads démon en Java ?
java
multithreading
bascule
la source
la source
Thread
javadoc décrit ce qu'ils sont: java.sun.com/javase/6/docs/api/java/lang/Thread.htmlRéponses:
Un thread démon est un thread qui n'empêche pas la sortie de la JVM à la fin du programme mais le thread est toujours en cours d'exécution. Un exemple de thread démon est le garbage collection.
Vous pouvez utiliser la
setDaemon(boolean)
méthode pour modifier lesThread
propriétés du démon avant le démarrage du thread.la source
setDamon(boolean)
ne peut être appelé qu'après le démarrage du thread. Par défaut, le thread hérite de l'état du démon de son thread parent.thread that does not prevent the JVM from exiting when the program finishes but the thread is still running
signifie essentiellement que le processus JVM qui a démarré le thread ne se soucie pas de savoir si le thread démon a terminé son exécution ou non, il se terminera lui-même si tous les threads normaux ont terminé l'exécution.Quelques points supplémentaires (Référence: Java Concurrency in Practice )
Une fois tous les threads non démon terminés, la JVM s'arrête et tous les threads démon restants sont abandonnés :
Pour cette raison, les threads démon doivent être utilisés avec parcimonie, et il est dangereux de les utiliser pour des tâches qui pourraient effectuer n'importe quel type d'E / S.
la source
finally
bloc n'est exécuté, que les threads soient des démons ou non. N'appelez donc pasSystem.exit(…)
si vous pensez qu'il peut y avoir des threads en cours d'exécution d'E / S. La seule différence est que la JVM déclenchera sa propre terminaison lorsqu'il ne restera que des threads démon.Toutes les réponses ci-dessus sont bonnes. Voici un petit extrait de code simple, pour illustrer la différence. Essayez-le avec chacune des valeurs true et false in
setDaemon
.la source
Traditionnellement, les processus démon sous UNIX étaient ceux qui fonctionnaient constamment en arrière-plan, un peu comme les services sous Windows.
Un thread démon en Java n'empêche pas la sortie de la JVM. Plus précisément, la JVM se fermera lorsqu'il ne restera que des threads démon. Vous en créez un en appelant la
setDaemon()
méthodeThread
.Lisez les fils de discussion de Daemon .
la source
Les threads démon sont comme des fournisseurs de services pour d'autres threads ou objets s'exécutant dans le même processus que le thread démon. Les threads démon sont utilisés pour les tâches de support en arrière-plan et ne sont nécessaires que pendant l'exécution des threads normaux. Si les threads normaux ne sont pas en cours d'exécution et que les threads restants sont des threads démon, l'interpréteur se ferme.
Par exemple, le navigateur HotJava utilise jusqu'à quatre threads démon nommés "Image Fetcher" pour extraire des images du système de fichiers ou du réseau pour tout thread qui en a besoin.
Les threads démon sont généralement utilisés pour effectuer des services pour votre application / applet (comme le chargement des "bits fiddley"). La principale différence entre les threads utilisateur et les threads démon est que la machine virtuelle Java ferme uniquement un programme lorsque tous les threads utilisateur sont terminés. Les threads démon sont arrêtés par la JVM lorsqu'il n'y a plus de threads utilisateur en cours d'exécution, y compris le thread principal d'exécution.
setDaemon (vrai / faux)? Cette méthode est utilisée pour spécifier qu'un thread est un thread démon.
public booléen isDaemon ()? Cette méthode est utilisée pour déterminer si le thread est un thread démon ou non.
Par exemple:
Production:
la source
Définition de démon (informatique):
—— Source: anglais par Oxford Dictionaries
Qu'est-ce que le thread Daemon en Java?
la source
Un thread démon est un thread qui est considéré comme effectuant certaines tâches en arrière-plan comme la gestion des demandes ou divers chronjobs pouvant exister dans une application.
Lorsque votre programme n'a plus que des threads démon, il se fermera. En effet, ces threads fonctionnent généralement avec les threads normaux et fournissent une gestion en arrière-plan des événements.
Vous pouvez spécifier que a
Thread
est un démon en utilisant unesetDaemon
méthode, ils ne quittent généralement pas, ils ne sont pas interrompus .. ils s'arrêtent juste quand l'application s'arrête.la source
Je voudrais clarifier une idée fausse:
la source
Thread démon et Threads utilisateur. Généralement, tous les threads créés par le programmeur sont des threads utilisateur (sauf si vous spécifiez qu'il s'agit d'un démon ou que votre thread parent est un thread démon). Les threads utilisateur sont généralement destinés à exécuter notre code de programme. JVM ne se termine que si tous les threads utilisateur se terminent.
la source
Java a un type spécial de thread appelé thread démon .
À quoi servent les threads démon?
Normalement utilisé comme fournisseur de services pour les threads normaux. Ont généralement une boucle infinie qui attend la demande de service ou exécute les tâches du thread. Ils ne peuvent pas faire des travaux importants. (Parce que nous ne savons pas quand ils auront du temps CPU et ils peuvent terminer à tout moment s'il n'y a pas d'autres threads en cours d'exécution.)
Un exemple typique de ce type de threads est le garbage collector Java .
Il y a plus...
setDaemon()
méthode avant d'appeler lastart()
méthode. Une fois le thread en cours d'exécution, vous ne pouvez pas modifier son état de démon.isDaemon()
méthode pour vérifier si un thread est un thread démon ou un thread utilisateur.la source
Les fils de démon sont comme des assistants. Les threads non Daemon sont comme les interprètes principaux. Les assistants aident les interprètes à terminer un travail. Une fois le travail terminé, les interprètes n'ont plus besoin d'aide pour jouer. Comme aucune aide n'est nécessaire, les assistants quittent le lieu. Ainsi, lorsque les travaux des threads non-démon sont terminés, les threads démon s'éloignent.
la source
Le thread démon est comme un thread normal, sauf que la JVM ne s'arrête que lorsque les autres threads non démon n'existent pas. Les threads démon sont généralement utilisés pour exécuter des services pour votre application.
la source
Les threads démon en Java sont les threads qui s'exécutent en arrière-plan et sont principalement créés par JVM pour effectuer des tâches en arrière-plan telles que la récupération de place et d'autres tâches de gestion interne.
Points à noter:
Tout thread créé par le thread principal, qui exécute la méthode principale en Java, est par défaut non démon car Thread hérite de sa nature de démon du thread qui le crée, c'est-à-dire le thread parent et puisque le thread principal est un thread non démon, tout autre thread créé à partir de celui-ci sera rester non-démon jusqu'à ce qu'il soit explicitement créé en appelant setDaemon (true).
Thread.setDaemon (true) crée un démon Thread mais il ne peut être appelé qu'avant de démarrer Thread en Java. Il lèvera IllegalThreadStateException si le thread correspondant est déjà démarré et en cours d'exécution.
Différence entre le thread Daemon et Non Daemon en Java:
1) JVM n'attend aucun thread démon pour terminer avant d'exister.
2) Le thread démon est traité différemment du thread utilisateur lorsque la JVM se termine, enfin les blocs ne sont pas appelés, les piles ne sont pas non endommagées et la JVM se termine.
la source
En Java, les threads démon sont l'un des types de threads qui n'empêchent pas la sortie de la machine virtuelle Java (JVM). Le principal objectif d'un thread démon est d'exécuter une tâche en arrière-plan, en particulier dans le cas d'une tâche ou d'un travail périodique de routine. Avec les sorties JVM, le thread démon meurt également.
En définissant a
thread.setDaemon(true)
, un thread devient un thread démon. Cependant, vous ne pouvez définir cette valeur qu'avant le démarrage du thread.la source
Voici un exemple pour tester le comportement des threads démon en cas de sortie jvm en raison de la non-existence de threads utilisateur.
Veuillez noter l'avant-dernière ligne dans la sortie ci-dessous, lorsque le thread principal est sorti, le thread démon est également mort et n'a pas imprimé l' instruction finalement exécutée9 dans le bloc enfin. Cela signifie que toutes les ressources d'E / S fermées dans le bloc finalement d'un thread démon ne seront pas fermées si la JVM se ferme en raison de l'absence de threads utilisateur.
Production
la source
Les threads démons sont, comme tout le monde l'a expliqué, ne contraindront pas JVM à quitter, donc en gros c'est un thread heureux pour Application du point de vue de la sortie.
Vous voulez ajouter que les threads démon peuvent être utilisés lorsque je dis que je fournis une API telle que la transmission de données vers un serveur tiers / ou JMS, je pourrais avoir besoin d'agréger des données au niveau de la machine virtuelle Java client, puis de les envoyer à JMS dans un thread séparé. Je peux faire ce fil comme fil de démon, si ce n'est pas une donnée obligatoire à pousser sur le serveur. Ce type de données est comme la transmission / agrégation de journaux.
Cordialement, Manish
la source
Le thread démon est comme le processus démon qui est responsable de la gestion des ressources, un thread démon est créé par la machine virtuelle Java pour servir les threads utilisateur. exemple de mise à jour du système pour unix, unix est un processus démon. L'enfant du thread démon est toujours le thread démon, donc par défaut le démon est faux. Vous pouvez vérifier le thread en tant que démon ou utilisateur en utilisant la méthode "isDaemon ()". le thread démon ou le processus démon sont donc essentiellement responsables de la gestion des ressources. par exemple, lorsque vous démarrez jvm, il y a un garbage collector en cours d'exécution qui est un thread démon dont la priorité est 1 qui est la plus basse, qui gère la mémoire. jvm est vivant tant que le thread utilisateur est vivant, vous ne pouvez pas tuer le thread démon.jvm est responsable de tuer les threads démon.
la source
Parlons uniquement en code avec des exemples de travail. J'aime la réponse de russ ci-dessus, mais pour lever tout doute que j'avais, je l'ai un peu améliorée. Je l'ai exécuté deux fois, une fois avec le thread de travail défini sur deamon true (fil de démon) et une autre fois défini sur false (thread utilisateur). Il confirme que le thread démon se termine lorsque le thread principal se termine.
la source
Les threads démon sont généralement appelés threads "Service Provider". Ces threads ne doivent pas être utilisés pour exécuter du code programme mais du code système. Ces threads fonctionnent parallèlement à votre code mais la JVM peut les tuer à tout moment. Lorsque la JVM ne trouve aucun thread utilisateur, elle l'arrête et tous les threads démon se terminent instantanément. Nous pouvons définir un thread non démon sur démon en utilisant:
la source
Les threads démon sont des threads qui s'exécutent en arrière-plan tant que d'autres threads non démon du processus sont toujours en cours d'exécution. Ainsi, lorsque tous les threads non démon sont terminés, les threads démon sont arrêtés. Un exemple pour le thread non démon est le thread exécutant le Main. Un thread est fait démon en appelant la
setDaemon()
méthode avant le démarrage du threadPour plus de référence: thread démon en Java
la source
Pour moi, le thread démon, c'est comme le gardien de maison pour les threads utilisateur. Si tous les threads utilisateur sont terminés, le thread démon n'a aucun travail et est tué par JVM. Je l'ai expliqué dans la vidéo YouTube .
la source
JVM accomplira le travail lorsqu'une dernière exécution de thread non démon est terminée. Par défaut, JVM créera un thread en tant que nondaemon mais nous pouvons créer Thread en tant que démon à l'aide de la méthode
setDaemon(true)
. Un bon exemple de thread Daemon est le thread GC qui terminera son travail dès que tous les threads nondaemon seront terminés.la source
Les threads démons meurent à la fin du thread créateur.
Les threads non démons (par défaut) peuvent même vivre plus longtemps que le thread principal.
la source
join
édité, le démon reste aussi longtemps que le thread principal s'exécute.