## Grupos de Threads

Cada thread de Java es miembro de un grupo de threads. Los grupos proporcionan un mecanismo para la colección de varios threads dentro de un sólo objeto y la manipulación de esos threads de una vez, mejor que de forma individual. Por ejemplo, se puede arrancar o suspender todos los threads de un grupo con una sóla llamada a un método. Los grupos de threads de Java están implementados por la clase ThreadGroup del paquete java.lang.

El sistema de ejecución pone un thread dentro de un grupo durante su construcción. Cuando se crea un thread, también se puede permitir que el sistema de ejecución ponga el nuevo thread en algún grupo por defecto razonable o se puede especificar explicitamente el grupo del nuevo thread. El thread es un miembro permanente del grupo al que se unió durante su creacción -- no se puede mover un thread a otro grupo después de haber sido creado.

### El Grupo de Threads por Defecto

> Si se crea un nuevo Thread sin especificar su grupo en el constructor, el sistema de ejecución automáticamente sitúa el nuevo thread en el mismo grupo que del thread que lo creó (conocido como el grupo de threads actual y el thread actual, respectivamente). Entonces, si se deja sin especificar el grupo de threads cuando se crea un thread, ¿qué grupo contiene el thread?

> Cuando se arranca por primera vez una aplicación Java, el sistema de ejecución crea un ThreadGroup llamado "main". Entonces, a menos que se especifique otra cosa, todos los nuevos threads que se creen se convierten en miembros del grupo de threads "main".

> Nota: Si se crea un thread dentro de un applet, el grupo del nuevo thread podría ser distinto de "main" -- depende del navegador o del visualizador donde se esté ejecutando al applet. Puedes referirse a Threads en Applets para obtener más información sobre los grupos de threads en los applets.

> Muchos programadores java ignoran por completo los grupos de threads y permiten al sistema de ejecución que maneje todos lo detalles con respecto a los grupos de threads. Sin embargo, si tu programa crea muchos threads que deben ser manipulados como un grupo, o si estás implementando un Controlador de Seguridad de cliente, probablemente querrás más control sobre los grupos de threads. Continúe leyendo para más detalles!

### Crear un Thread en un Grupo Específico

> Como se mencionó anteriormente, un thread es un miembro permanente del grupo al que se unió cuando fue creado -- no se puede mover un thread a otro grupo despues de haber sido creado. Así, si se desea poner si nuevo thread en un grupo distinto al de defecto, se debe especificar explícitamente el grupo en que crear el thrread. La clase Thread tiene tres constructores que permiten seleccionar un nuevo grupo de threads:

>     public Thread(ThreadGroup grupo, Runnable fuente)
>     public Thread(ThreadGroup grupo, String nombre)
>     public Thread(ThreadGroup grupo, Runnable fuente, String nombre)

> Cada uno de estos constructores crea un nuevo thread, lo inicializa basandose en los parámetros Runnable y String, y lo hace miembro del grupo especificado. Por ejemplo, el siguiente ejemplo crea un grupo de threads (miGrupoDeThread) y luego crea un thread (miThread) en ese grupo.

>     ThreadGroup miGrupoDeThread = new ThreadGroup("Mi Grupo de Threads");
>     Thread miThread = new Thread(miGrupoDeThread, "un thread de mi grupo");

> El ThreadGroup pasado al constructor del Thread no tiene que ser necesariamente un grupo que hayas creado -- puede ser un grupo creado por el sistema de ejecución Java, o un grupo creado por la aplicación donde se está ejecutando el applet.

### Obtener el Grupo de un Thread

> Para encontrar el grupo en el que está un thread, puede llamar a su método getThreadGroup().

>     theGroup = miThread.getThreadGroup();

### La Clase ThreadGroup

> Una vez que obtenido el Grupo de un thread, puedes pedir más información sobre el grupo, como cuántos threads más hay en el grupo. También se pueden modificar todos los threads del grupo (como suspenderlos, pararlos, etc...) con una sola llamada a un método.

Ozito