Multithreading
 
Methods that Operate on the Group
 
The ThreadGroup class supports several attributes that are set and retrieved from the group as a whole. These attributes include the maximum priority that any thread within the group can have, whether the group is a "daemon" group, the name of the group, and the parent of the group.
 
The methods that get and set ThreadGroup attributes operate at the group level. That is, they inspect or change the attribute on the ThreadGroup object, but do not affect any of the threads within the group.
 
 
The following is a list of ThreadGroup methods that operate at the group level:
1. getMaxPriority(), and setMaxPriority()
2. getDaemon(), and setDaemon()
3. getName()
4. getParent(), and parentOf()
5. toString()
 
So for example, when we use setMaxPriority() to change a group's maximum priority, we are only changing the attribute on the group object; we are not changing the priority of any of the threads within the group.
 
 
Consider this small program that creates a group and a thread within that group:
 
class MaxPriorityTest
{
public static void main(String[] args)
{

ThreadGroup groupNORM = new ThreadGroup(
"A group with normal priority");
Thread priorityMAX = new Thread(groupNORM,
"A thread with maximum priority");

// set Thread's priority to max (10)
priorityMAX.setPriority(Thread.MAX_PRIORITY);

// set ThreadGroup's max priority to normal (5)
groupNORM.setMaxPriority(Thread.NORM_PRIORITY);

System.out.println("Group's maximum priority = " +
groupNORM.getMaxPriority());
System.out.println("Thread's priority = " +
priorityMAX.getPriority());
}
}
 
When the ThreadGroup groupNORM is created, it inherits its maximum priority attribute from its parent thread group.
In this case, the parent group priority is the maximum (MAX_PRIORITY) allowed by the Java runtime system.
Next the program sets the priority of the priorityMAX thread to the maximum allowed by the Java runtime system. Then the program lowers the group's maximum to the normal priority (NORM_PRIORITY).
The setMaxPriority() method does not affect the priority of the priorityMAX thread, so that at this point, the priorityMAX thread has a priority of 10 which is greater than the maximum priority of its group groupNORM. This is the output from the program:
Group's maximum priority = 5
Thread's priority = 10
 
 
As we can see a thread can have a higher priority than the maximum allowed by its group as long as the thread's priority is set before the group's maximum priority is lowered. A thread group's maximum priority is used to limit a thread's priority when the thread is first created within a group or when you use setPriority() to change the thread's priority. Note that setMaxPriority() does change the maximum priority of all of its sub-threadgroups.
 
 
Methods that Operate on All Threads within a Group
The ThreadGroup class has three methods that allow us to modify the current state of all the threads within that group:
1. resume()
2. stop()
3. suspend()
 
These methods apply the appropriate state change to every thread in the thread group and its subgroups.