JavaRush /Java Blog /Random-IT /ThreadGroup
Core
Livello 35
Екатеринбург

ThreadGroup

Pubblicato nel gruppo Random-IT
Buon pomeriggio e felice anno nuovo! Aiutami a capire qualcosa in più sul multithreading, ovvero ThreadGroup. Ho cercato su Google, letto e capito l'essenza principale: lo scopo è la sicurezza, la gestione integrata attraverso l'organizzazione di un gruppo.
I thread sono raggruppati in gruppi di thread per motivi di gestibilità e sicurezza. Un gruppo di thread può appartenere a un altro gruppo, formando una gerarchia con il gruppo principale (di sistema) al livello più alto. I thread appartenenti a un gruppo possono essere controllati contemporaneamente: hai il diritto di interrompere il lavoro di tutti i thread del gruppo contemporaneamente o di impostare per loro un unico valore di priorità di esecuzione massima. I gruppi di thread possono essere utilizzati anche per definire domini di sicurezza. I thread all'interno di un gruppo sono generalmente dotati della possibilità di influenza reciproca, che si estende anche ai thread di gruppi nidificati. Quando diciamo "influenza", intendiamo che qualsiasi chiamata al metodo può influenzare il comportamento del thread, ad esempio, modificarne la priorità o causare un'interruzione.
(fonte: Tyts )
Per evitare che un singolo thread inizi a fermarsi e interrompa tutti i thread di seguito, è stato introdotto il concetto di gruppo. Un thread può influenzare solo i thread che si trovano nel suo stesso gruppo. Un gruppo di thread è rappresentato dalla classe ThreadGroup. Questa organizzazione consente di proteggere i flussi da influenze esterne indesiderate. Un gruppo di thread può contenere altri gruppi, consentendo a tutti i thread e i gruppi di essere organizzati in un albero gerarchico in cui ciascun oggetto ThreadGroup, tranne quello radice, ha un genitore.
(fonte: Tyts ) Dopo aver letto vari articoli, ho deciso di scrivere un piccolo codice in cui non sarei stato in grado di interrompere i flussi di un altro gruppo da un thread di un gruppo. E qualcosa non ha funzionato: mi permette di interrompere((( Il mio codice: Perché è possibile interrompere? Ecco l'output: 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 прервана
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION