JavaRush /Blogue Java /Random-PT /Grupo de Tópicos
Core
Nível 35
Екатеринбург

Grupo de Tópicos

Publicado no grupo Random-PT
Boa tarde e feliz ano novo! Ajude-me a entender um pouco mais sobre multithreading, ou seja, ThreadGroup. Pesquisei no Google, li e entendi a essência principal: o propósito é segurança, gestão integrada através da organização de um grupo.
Os threads são agrupados em grupos de threads por motivos de gerenciamento e segurança. Um grupo de threads pode pertencer a outro grupo, formando uma hierarquia com o grupo principal (sistema) no nível superior. Threads pertencentes a um grupo podem ser controlados ao mesmo tempo - você tem o direito de interromper o trabalho de todos os threads do grupo de uma vez ou definir um único valor máximo de prioridade de execução para eles. Grupos de threads também podem ser usados ​​para definir domínios de segurança. Threads dentro de um grupo geralmente são dotados da possibilidade de influência mútua, que também se estende a threads de grupos aninhados. Quando dizemos “influência”, queremos dizer que qualquer chamada de método pode afetar o comportamento do thread, por exemplo, alterar sua prioridade ou causar uma interrupção.
(fonte: Tyts )
Para evitar que um único thread pare e interrompa todos os threads consecutivos, foi introduzido o conceito de grupo. Um thread só pode influenciar threads que estejam no mesmo grupo que ele. Um grupo de threads é representado pela classe ThreadGroup. Esta organização permite proteger os fluxos de influências externas indesejadas. Um grupo de threads pode conter outros grupos, permitindo que todos os threads e grupos sejam organizados em uma árvore hierárquica na qual cada objeto ThreadGroup, exceto o raiz, possui um pai.
(fonte: Tyts ) Depois de ler vários artigos, decidi escrever um pequeno código no qual não seria capaz de interromper os fluxos de outro grupo de um thread de um grupo. E algo não deu certo: me permite interromper((( Meu código: Por que é possível interromper? Aqui está o resultado: 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 прервана
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION