JavaRush /Blog Java /Random-FR /Groupe de discussions
Core
Niveau 35
Екатеринбург

Groupe de discussions

Publié dans le groupe Random-FR
Bonjour et bonne année ! Aidez-moi à comprendre un peu plus le multithreading, à savoir ThreadGroup. J'ai cherché, lu et compris l'essentiel sur Google : le but est la sécurité, la gestion intégrée à travers l'organisation d'un groupe.
Les threads sont regroupés en groupes de threads pour des raisons de facilité de gestion et de sécurité. Un groupe de threads peut appartenir à un autre groupe, formant une hiérarchie avec le groupe principal (système) au niveau supérieur. Les threads appartenant à un groupe peuvent être contrôlés en même temps - vous avez le droit d'interrompre le travail de tous les threads du groupe en même temps ou de définir une seule valeur de priorité d'exécution maximale pour eux. Les groupes de threads peuvent également être utilisés pour définir des domaines de sécurité. Les threads au sein d'un groupe sont généralement dotés de la possibilité d'une influence mutuelle, qui s'étend également aux threads des groupes imbriqués. Lorsque nous disons « influence », nous entendons que tout appel de méthode peut affecter le comportement du thread, par exemple, modifier sa priorité ou provoquer une interruption.
(source : Tyts )
Pour éviter qu'un seul thread ne commence à arrêter et à interrompre tous les threads d'affilée, le concept de groupe a été introduit. Un fil de discussion ne peut influencer que les fils de discussion appartenant au même groupe que lui. Un groupe de threads est représenté par la classe ThreadGroup. Cette organisation permet de protéger les flux des influences extérieures indésirables. Un groupe de threads peut contenir d'autres groupes, permettant à tous les threads et groupes d'être organisés dans une arborescence hiérarchique dans laquelle chaque objet ThreadGroup, à l'exception de celui racine, a un parent.
(source : Tyts ) Après avoir lu divers articles, j'ai décidé d'écrire un petit code dans lequel je ne pourrais pas interrompre les flux d'un autre groupe à partir d'un thread d'un groupe. Et quelque chose n'a pas fonctionné : cela me permet d'interrompre ((( Mon code : Pourquoi est-il possible d'interrompre ? Voici le résultat : public class Test { public static ArrayList threads = new ArrayList (); public static ArrayList groups = new ArrayList (); public static void main(String[] args) throws InterruptedException { final ThreadGroup group1 = new ThreadGroup("GROUP 1"); final ThreadGroup group2 = new ThreadGroup("GROUP 2"); final ThreadGroup group3 = new ThreadGroup("GROUP 3"); groups.add(group1); groups.add(group2); groups.add(group3); for (int i = 0; i < groups.size(); i++) { for (int j = 1; j < 5; j++) { Thread thread = new Thread(groups.get(i), "THREAD №" + j) { @Override public void run() { while (!isInterrupted()) { try { Thread.sleep(500); } catch (InterruptedException e) { System.out.println(getName() + " : " + getThreadGroup().getName() + " прервана"); } } } }; threads.add(thread); thread.start(); } } Thread thread = new Thread(group1, "THREAD №5") { @Override public void run() { group2.interrupt(); while (true); } }; thread.start(); threads.add(thread); for (Thread t : threads) System.out.println(t); } } Thread[THREAD №1,5,GROUP 1] Thread[THREAD №2,5,GROUP 1] Thread[THREAD №3,5,GROUP 1] Thread[THREAD №4,5,GROUP 1] Thread[THREAD №1,5,GROUP 2] Thread[THREAD №2,5,GROUP 2] Thread[THREAD №3,5,GROUP 2] Thread[THREAD №4,5,GROUP 2] Thread[THREAD №1,5,GROUP 3] Thread[THREAD №2,5,GROUP 3] Thread[THREAD №3,5,GROUP 3] Thread[THREAD №4,5,GROUP 3] Thread[THREAD №5,5,GROUP 1] THREAD №1 : GROUP 2 прервана THREAD №2 : GROUP 2 прервана THREAD №4 : GROUP 2 прервана THREAD №3 : GROUP 2 прервана
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION