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. 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:
getMaxPriority
andsetMaxPriority
getDaemon
andsetDaemon
getName
getParent
andparentOf
toString
setMaxPriority
to change a group's maximum priority, you are only changing the attribute on the group object; you are not changing the priority of any of the threads within the group. Consider the following program that creates a group and a thread within that group: public 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());
}
}
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 = 5As you 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
Thread's priority = 10
setPriority
to change the thread's priority. Note that setMaxPriority
does change the maximum priority of all of its descendant-threadgroups. Similarly, a group's daemon status applies only to the group. Changing a group's daemon status does not affect the daemon status of any of the threads in the group. Furthermore, a group's daemon status does not in any way imply the daemon status of its threads--you can put any thread within a daemon thread group. The daemon status of a thread group simply indicates that the group will be destroyed when all of its threads have been terminated.
No comments:
Post a Comment