Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
This month's Java 101 concludes the thread series by focusing on thread groups, volatility, thread-local variables, timers, and the
In a network server program, one thread waits for and accepts requests from client programs to execute, for example, database
transactions or complex calculations. The thread usually creates a new thread to handle the request. Depending on the request
volume, many different threads might be simultaneously present, complicating thread management. To simplify thread management,
programs organize their threads with thread groups—
java.lang.ThreadGroup objects that group related threads'
Thread subclass) objects. For example, your program can use
ThreadGroup to group all printing threads into one group.
Note: To keep the discussion simple, I refer to thread groups as if they organize threads. In reality, thread groups organize
Thread subclass) objects associated with threads.
Java requires every thread and every thread group—save the root thread group,
system—to join some other thread group. That arrangement leads to a hierarchical thread-group structure, which the figure below
illustrates in an application context.
At the top of the figure's structure is the
system thread group. The JVM-created
system group organizes JVM threads that deal with object finalization and other system tasks, and serves as the root thread group
of an application's hierarchical thread-group structure. Just below
system is the JVM-created
main thread group, which is
system's subthread group (subgroup, for short).
main contains at least one thread—the JVM-created main thread that executes byte-code instructions in the
main group reside the
subgroup 1 and
subgroup 2 subgroups, application-created subgroups (which the figure's application creates). Furthermore,
subgroup 1 groups three application-created threads:
thread 2, and
thread 3. In contrast,
subgroup 2 groups one application-created thread:
Now that you know the basics, let's start creating thread groups.
ThreadGroup class's SDK documentation reveals two constructors:
ThreadGroup(String name) and
ThreadGroup(ThreadGroup parent, String name). Both constructors create a thread group and give it a name, as the
name parameter specifies. The constructors differ in their choice of what thread group serves as parent to the newly created thread
group. Each thread group, except
system, must have a parent thread group. For
ThreadGroup(String name), the parent is the thread group of the thread that calls
ThreadGroup(String name). As an example, if the main thread calls
ThreadGroup(String name), the newly created thread group has the main thread's group as its parent—
ThreadGroup(ThreadGroup parent, String name), the parent is the group that
parent references. The following code shows how to use these constructors to create a pair of thread groups: