JavaRush /Blog Java /Random-ES /Grupo de subprocesos
Core
Nivel 35
Екатеринбург

Grupo de subprocesos

Publicado en el grupo Random-ES
¡Buenas tardes y feliz año nuevo! Ayúdame a comprender un poco más sobre subprocesos múltiples, es decir, ThreadGroup. Busqué en Google, leí y entendí la esencia principal: el propósito es la seguridad, la gestión integrada a través de la organización de un grupo.
Los subprocesos se agrupan en grupos de subprocesos por razones de manejabilidad y seguridad. Un grupo de subprocesos puede pertenecer a otro grupo, formando una jerarquía con el grupo principal (sistema) en el nivel superior. Los subprocesos que pertenecen a un grupo se pueden controlar al mismo tiempo: tiene derecho a interrumpir el trabajo de todos los subprocesos del grupo a la vez o establecer un único valor máximo de prioridad de ejecución para ellos. Los grupos de subprocesos también se pueden utilizar para definir dominios de seguridad. Los hilos dentro de un grupo suelen estar dotados de la posibilidad de influencia mutua, que también se extiende a los hilos de grupos anidados. Cuando decimos "influencia", queremos decir que cualquier llamada a un método puede afectar el comportamiento del hilo, por ejemplo, cambiar su prioridad o provocar una interrupción.
(fuente: Tyts )
Para evitar que un solo hilo comience a detenerse e interrumpir todos los hilos seguidos, se introdujo el concepto de grupo. Un hilo sólo puede influir en los hilos que están en el mismo grupo que él. Un grupo de subprocesos está representado por la clase ThreadGroup. Esta organización le permite proteger los flujos de influencias externas no deseadas. Un grupo de subprocesos puede contener otros grupos, lo que permite organizar todos los subprocesos y grupos en un árbol jerárquico en el que cada objeto ThreadGroup, excepto el raíz, tiene un padre.
(fuente: Tyts ) Después de leer varios artículos, decidí escribir un pequeño código en el que no podría interrumpir los flujos de otro grupo desde un hilo de un grupo. Y algo no funcionó: me permite interrumpir((( Mi código: ¿Por qué es posible interrumpir? Aquí está el 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 прервана
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION