Question

Je voudrais tuer des fils qui sont coincés dans un état de blocage. Tout d'abord, nous pouvons détecter ids de fil dans l'état de blocage selon la méthode de findDeadlockedThreads() de la classe ThreadMXBean dans java.lang.management.

Alors, je voudrais tuer les fils par ids de fil, et donc j'ai deux questions connexes:
(1) Comment obtenir le contrôle d'un fil par id fil?
(2) Comment tuer un thread bloqué? Je pense que la méthode d'interruption de invokting () donnera une exception au fil et va tuer le fil.

Était-ce utile?

La solution

De la ThreadGroup racine, vous pouvez avoir la classe Discussion énumérer toutes les discussions en cours d'exécution . Ensuite, vous pouvez appeler Thread.stop sur celui qui correspond à votre ID.

Cela dit, cela est très dangereux en raison du risque de laisser des objets dans un état incohérent. Je ne crois pas que la méthode d'interruption provoquera un fil à libéré qui est coincé dans l'attente d'un verrou de synchronisation, de sorte que les méthodes arrêt (mal)

Voir aussi: « Java Discussion primitive Obsolescence ».

Autres conseils

La méthode java.util.concurrent.Lock.lockInterruptibly () est interrompue, le verrouillage synchronisé beaucoup plus fréquent est pas. Comme il est mentionné dans la documentation, la possibilité d'énumérer les discussions interblocage est conçu comme une aide au débogage et non pas comme un moyen de récupérer dans un environnement de production.

Dans la production, il est probablement plus sûr de quitter le processus et redémarrez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top