| 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. |
| |