All threads belong to one of a thread group in Java. When you create a thread in Java it is put into a thread group specified either by you or to the same group as the thread that created it if no thread group is explicitly specified.
Default thread group
When a Java application is started one thread starts running immediately which is known as main thread in Java and this main thread belongs to a thread group called main. If you create other threads (with in the context of main thread) with out specifying thread group then these thread will also belong to main thread group.
Usage of thread group in Java
Thread groups provide a convenient way to manage multiple threads as a single thread group object. Using that thread group object you can manipulate all the threads belonging to that group as a single unit rather than doing that individually. For example-
Thread.currentThread().getThreadGroup().interrupt();
This will interrupt all the thread belonging to that thread group with a single statement.
ThreadGroup Class in Java
Java provides a class java.lang.ThreadGroup
for creating thread groups in Java.
ThreadGroup class has two constructors for creating thread groups.
- public ThreadGroup(String name)- Constructs a new thread group. The parent of this new group is the thread group of the currently running thread.
- public ThreadGroup(ThreadGroup parent, String name)- Creates a new thread group. The parent of this new group is the specified thread group.
Some of the important methods of the ThreadGroup Class are.
- String getName()- Returns the name of this thread group.
- ThreadGroup getParent()- Returns the parent of this thread group.
- boolean isDaemon()- Tests if this thread group is a daemon thread group.
- void checkAccess()- Determines if the currently running thread has permission to modify this thread group.
- int activeCount()- Returns an estimate of the number of active threads in this thread group and its subgroups. Recursively iterates over all subgroups in this thread group.
- int enumerate(Thread[] list)- Copies into the specified array every active thread in this thread group and its subgroups.
- void interrupt()- Interrupts all threads in this thread group.
- void list()- Prints information about this thread group to the standard output.
Creating Thread in specific thread group
Thread class in Java provides constructor where you can specify a thread group. Few of those constructors are listed here.
- public Thread(ThreadGroup group, Runnable target)
- public Thread(ThreadGroup group, String name)
- public Thread(ThreadGroup group, Runnable target, String name)
Thread group Java example
public class TGDemo implements Runnable { public static void main(String[] args) { System.out.println("In main method " + Thread.currentThread().getName() + " Group " + Thread.currentThread().getThreadGroup().getName()); TGDemo runnableTarget = new TGDemo(); // Creating two thread groups ThreadGroup group1 = new ThreadGroup("Group-1"); ThreadGroup group2 = new ThreadGroup("Group-2"); // Creating 4 threads belonging to the created thread groups Thread t1 = new Thread(group1, runnableTarget, "T1"); Thread t2 = new Thread(group1, runnableTarget, "T2"); Thread t3 = new Thread(group2, runnableTarget, "T3"); Thread t4 = new Thread(group2, runnableTarget, "T4"); t1.start(); t2.start(); t3.start(); t4.start(); group1.list(); group2.list(); } @Override public void run() { System.out.println("In run method " + Thread.currentThread().getName() + " Group " + Thread.currentThread().getThreadGroup().getName()); if(Thread.currentThread().getThreadGroup().getName().equals("Group-1")){ Thread.currentThread().getThreadGroup().interrupt(); } if (Thread.interrupted()) { System.out.println("interrupted " + Thread.currentThread().getName()); } } }Output
In main method main Group main In run method T1 Group Group-1 java.lang.ThreadGroup[name=Group-1,maxpri=10] In run method T2 Group Group-1 Thread[T1,5,Group-1] In run method T4 Group Group-2 Thread[T2,5,Group-1] java.lang.ThreadGroup[name=Group-2,maxpri=10] Thread[T3,5,Group-2] interrupted T1 interrupted T2 In run method T3 Group Group-2
As you can see initially when the application starts main thread starts running and it belongs to thread group main.
Then two thread groups "Group-1" and "Group-2" are created. Four thread are also created to of these threads belong to “Group-1” and other two belongs to “Group-2”.
In run()
method you can see specific logic is there for threads belonging to "Group-1".
Reference- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ThreadGroup.html
That's all for the topic Thread Group in Java. If something is missing or you have something to share about the topic please write a comment.
You may also like
- Thread Priority in Java With Examples
- Thread Starvation in Java
- Race Condition in Java With Examples
- Java try-with-resources With Examples
- Convert ArrayList to Array in Java
- Object Cloning in Java Using clone() Method
- Find Length of String Without Using length() Method in Java
- Spring Dependency Injection With Examples
- React Conditional Rendering With Examples
- Java Program to Write a File in HDFS
No comments:
Post a Comment