The Wayback Machine - https://web.archive.org/web/20240907063857/https://www.geeksforgeeks.org/java-lang-threadgroup-class-java/
Open In App

Java.lang.ThreadGroup class in Java

Last Updated : 04 Jul, 2017
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

ThreadGroup creates a group of threads. It offers a convenient way to manage groups of threads as a unit. This is particularly valuable in situation in which you want to suspend and resume a number of related threads.

  • The thread group form a tree in which every thread group except the initial thread group has a parent.
  • A thread is allowed to access information about its own thread group but not to access information about its thread group’s parent thread group or any other thread group.

Constructors:

  1. public ThreadGroup(String name): Constructs a new thread group. The parent of this new group is the thread group of the currently running thread.

    Throws: SecurityException - if the current thread cannot
     create a thread in the specified thread group.
    
  2. public ThreadGroup(ThreadGroup parent, String name): Creates a new thread group. The parent of this new group is the specified thread group.

    Throws: 
    NullPointerException - if the thread group argument is null.
    SecurityException - if the current thread cannot create a thread in the 
    specified thread group.
    

Methods

  1. int activeCount(): This method returns the number of threads in the group plus any group for which this thread is parent.

    Syntax: public int activeCount()
    Returns: This method returns an estimate of the number of 
    active threads in this thread group and in any other thread group 
    that has this thread group as an ancestor.
    Exception: NA
    




    // Java code illustrating activeCount() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 1000; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[])
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("parent thread group");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // checking the number of active thread
            System.out.println("number of active thread: "
                               + gfg.activeCount());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    number of active thread: 2
    
  2. int activeGroupCount(): This method returns an estimate of the number of active groups in this thread group.

    Syntax: public int activeGroupCount().
    Returns: Returns the number of groups for which the invoking thread is parent.
    Exception: NA.
    




    // Java code illustrating activeGroupCount() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 1000; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("gfg");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // checking the number of active thread
            System.out.println("number of active thread group: "
                               + gfg.activeGroupCount());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    number of active thread group: 2
    one finished executing
    two finished executing
    
  3. void checkAccess(): Causes the security manager to verify that the invoking thread may access and/ or change the group on which checkAccess() is called.

    Syntax: final void checkAccess().
    Returns: NA.
    Exception: NA.
    




    // Java code illustrating checkAccess() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 1000; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() +
                  " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
            gfg.checkAccess();
            System.out.println(gfg.getName() + " has access");
            gfg_child.checkAccess();
            System.out.println(gfg_child.getName() + " has access");
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Parent thread has access
    child thread has access
    one finished executing 
    two finished executing
    
  4. void destroy(): Destroys the thread group and any child groups on which it is called.

    Syntax: public void destroy().
    Returns: NA.
    Exception: 
    IllegalThreadStateException - if the thread group is not 
    empty or if the thread group has already been destroyed.
    SecurityException - if the current thread cannot modify this thread group.
    




    // Java code illustrating destroy() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // block until other thread is finished
            t1.join();
            t2.join();
      
            // destroying child thread
            gfg_child.destroy();
            System.out.println(gfg_child.getName() + " destroyed");
      
            // destroying parent thread
            gfg.destroy();
            System.out.println(gfg.getName() + " destroyed");
        }
    }

    
    

    Output:

    Starting one
    Starting two
    child thread destroyed
    Parent thread destroyed
    
  5. int enumerate(Thread group[]): The thread that comprise the invoking thread group are put into the group array.

    Syntax: public int enumerate(Thread group[]).
    Returns: the number of threads put into the array.
    Exception: SecurityException - if the current thread 
    does not have permission to enumerate this thread group.
    




    // Java code illustrating enumerate() method.
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() +
                 " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // returns the number of threads put into the array
            Thread[] group = new Thread[gfg.activeCount()];
            int count = gfg.enumerate(group);
            for (int i = 0; i < count; i++) 
            {
                System.out.println("Thread " + group[i].getName() + " found");
            }
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Thread one found
    Thread two found
    one finished executing
    two finished executing
    
  6. int enumerate(Thread[] group, boolean recurse): The threads that comprise the invoking thread group are put into the group array. If all is true, then threads in all subgroups of the thread are also put into group.

    Syntax: public int enumerate(Thread[] list, boolean recurse).
    Returns: the number of threads placed into the array.
    Exception: SecurityException - if the current thread does 
    not have permission to enumerate this thread group.
    




    // Java code illustrating enumerate(Thread[] group, boolean recurse)
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() +
                  " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // returns the number of threads put into the array
            Thread[] group = new Thread[gfg.activeCount()];
            int count = gfg.enumerate(group, true);
            for (int i = 0; i < count; i++) 
            {
                System.out.println("Thread " + group[i].getName() + " found");
            }
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Thread one found
    Thread two found
    one finished executing
    two finished executing
    
  7. int enumerate(ThreadGroup[] group): The subgroups of the evoking thread group are put into the group array.

    Syntax: public int enumerate(ThreadGroup[] group).
    Returns: the number of thread groups put into the array.
    Exception: SecurityException - if the current thread does 
    not have permission to enumerate this thread group.
    




    // Java code illustrating enumerate(ThreadGroup[] group) method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                   " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // returns the number of threads put into the array
            ThreadGroup[] group = new ThreadGroup[gfg.activeCount()];
            int count = gfg.enumerate(group);
            for (int i = 0; i < count; i++) 
            {
                System.out.println("ThreadGroup " + group[i].getName() +
                    " found");
            }
        }
    }

    
    

    Output:

    Starting one
    Starting two
    ThreadGroup child thread found
    two finished executing
    one finished executing
    
  8. int enumerate(ThreadGroup[] group, boolean all): The subgroups of the invoking thread group are put into the group array. If all is true, then all subgroups of the subgroups(and so on) are also put into group.

    Syntax: public int enumerate(ThreadGroup[] group, boolean all)
    Returns: the number of thread groups put into the array.
    Exception: SecurityException - if the current thread does 
    not have permission to enumerate this thread group.
    




    // Java code illustrating enumerate(ThreadGroup[] group, boolean all)
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() +
                   " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
      
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
      
            // returns the number of threads put into the array
            ThreadGroup[] group = new ThreadGroup[gfg.activeCount()];
            int count = gfg.enumerate(group, true);
            for (int i = 0; i < count; i++) 
            {
                System.out.println("ThreadGroup " + group[i].getName() + 
                    " found");
            }
        }
    }

    
    

    Output:

    Starting one
    Starting two
    ThreadGroup child thread found
    two finished executing
    one finished executing
    
  9. int getMaxPriority(): Returns the maximum priority setting for the group.

    Syntax: final int getMaxPriority().
    Returns: the maximum priority that a thread in this thread group can have.
    Exception: NA.
    




    // Java code illustrating getMaxPriority() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() +
                   " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            // checking the maximum priority of parent thread
            System.out.println("Maximum priority of ParentThreadGroup = "
                               + gfg.getMaxPriority());
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting one");
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting two");
        }
    }

    
    

    Output:

    Maximum priority of ParentThreadGroup = 10
    Starting one
    Starting two
    two finished executing
    one finished executing
    
  10. String getName(): This method returns the name of the group.

    Syntax: final String getName().
    Returns: the name of this thread group.
    Exception: NA.
    




    // Java code illustrating getName() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                 " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    two finished executing
    one finished executing
    
  11. ThreadGroup getParent(): Returns null if the invoking ThreadGroup object has no parent. Otherwise, it returns the parent of the invoking object.

    Syntax: final ThreadGroup getParent().
    Returns: the parent of this thread group. 
    The top-level thread group is the only thread group 
    whose parent is null.
    Exception: SecurityException - if the current thread 
    cannot modify this thread group.
    




    // Java code illustrating getParent() method
    import java.lang.*;
    class NewThread extends Thread {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) {
                    System.out.println("Exception encounterted");
                }
            }
            System.out.println(Thread.currentThread().getName()
                                                + " finished executing");
        }
    } public class ThreadGroupDemo {
    public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            // prints the parent ThreadGroup 
            // of both parent and child threads
            System.out.println("ParentThreadGroup for " + gfg.getName() +
                            " is " + gfg.getParent().getName());
            System.out.println("ParentThreadGroup for " + gfg_child.getName() 
                            + " is " + gfg_child.getParent().getName());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    ParentThreadGroup for Parent thread is main
    ParentThreadGroup for child thread is Parent thread
    one finished executing
    two finished executing
    
  12. void interrupt(): Invokes the interrupt() methods of all threads in the group.

    Syntax: public final void interrupt().
    Returns: NA.
    Exception: SecurityException - if the current thread is not 
    allowed to access this thread group or any of the threads in the thread group.
    




    // Java code illustrating interrupt() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                 " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            // interrupting thread group
            gfg.interrupt();
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Thread two interrupted
    Thread one interrupted
    one finished executing
    two finished executing
    
  13. boolean isDaemon(): Tests if this thread group is a daemon thread group. A daemon thread group is automatically destroyed when its last thread is stopped or its last thread group is destroyed.

    Syntax: public final boolean isDaemon().
    Returns: true if the group is daemon group. Otherwise it returns false.
    Exception: NA.
    




    // Java code illustrating isDaemon() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                    " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            if (gfg.isDaemon() == true)
                System.out.println("Group is Daemon group");
            else
                System.out.println("Group is not Daemon group");
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Group is not Daemon group
    two finished executing
    one finished executing
    
  14. boolean isDestroyed(): This method tests if this thread group has been destroyed.

    Syntax: public boolean isDestroyed().
    Returns: true if this object is destroyed.
    Exception: NA.
    




    // Java code illustrating isDestroyed() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                    " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            if (gfg.isDestroyed() == true)
                System.out.println("Group is destroyed");
            else
                System.out.println("Group is not destroyed");
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Group is not destroyed
    one finished executing
    two finished executing
    
  15. void list(): Displays information about the group.

    Syntax: public void list().
    Returns: NA.
    Exception: NA.
    




    // Java code illustrating list() method.
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                  " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            // listing contents of parent ThreadGroup
            System.out.println("\nListing parentThreadGroup: " + gfg.getName() 
                  + ":");
            // prints information about this thread group
            // to the standard output
            gfg.list();
        }
    }

    
    

    Output:

    Starting one
    Starting two
    
    Listing parentThreadGroup: Parent thread:
    java.lang.ThreadGroup[name=Parent thread, maxpri=10]
        Thread[one, 5, Parent thread]
        Thread[two, 5, Parent thread]
        java.lang.ThreadGroup[name=child thread, maxpri=10]
    one finished executing
    two finished executing
    
  16. boolean parentOf(ThreadGroup group): This method tests if this thread group is either the thread group argument or one of its ancestor thread groups.

    Syntax: final boolean parentOf(ThreadGroup group).
    Returns: true if the invoking thread is the parent 
    of group(or group itself). Otherwise, it returns false.
    Exception: NA.
    




    // Java code illustrating parentOf() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                    " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            // checking who is parent thread
            if (gfg.parentOf(gfg_child))
                System.out.println(gfg.getName() + " is parent of " +
                   gfg_child.getName());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Parent thread is parent of child thread
    two finished executing
    one finished executing
    
  17. void setDaemon(boolean isDaemon): This method changes the daemon status of this thread group. A daemon thread group is automatically destroyed when its last thread is stopped or its last thread group is destroyed.

    Syntax: final void setDaemon(boolean isDaemon).
    Returns: If isDaemon is true, then the invoking group is 
    flagged as a daemon group.
    Exception: SecurityException - if the current 
    thread cannot modify this thread group.
    




    // Java code illustrating setDaemon() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                   " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            // daemon status is set to true
            gfg.setDaemon(true);
      
            // daemon status is set to true
            gfg_child.setDaemon(true);
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            if (gfg.isDaemon() && gfg_child.isDaemon())
                System.out.println("Parent Thread group and "
                                   + "child thread group"
                                   + " is daemon");
        }
    }

    
    

    Output:

    Starting one
    Starting two
    Parent Thread group and child thread group is daemon
    one finished executing
    two finished executing
    
  18. void setMaxPriority(int priority): Sets the maximum priority of the invoking group to priority.

    Syntax: final void setMaxPriority(int priority).
    Returns: NA.
    Exception: SecurityException - if the current thread 
    cannot 
    modify this thread group.
    




    // Java code illustrating setMaxPriority() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                     " [priority = "
               Thread.currentThread().getPriority() + "]
                    finished executing.");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
            gfg.setMaxPriority(Thread.MAX_PRIORITY - 2);
            gfg_child.setMaxPriority(Thread.NORM_PRIORITY);
      
            NewThread t1 = new NewThread("one", gfg);
            t1.setPriority(Thread.MAX_PRIORITY);
            System.out.println("Starting " + t1.getName());
            t1.start();
            NewThread t2 = new NewThread("two", gfg_child);
            t2.setPriority(Thread.MAX_PRIORITY);
            System.out.println("Starting " + t2.getName());
            t2.start();
        }
    }

    
    

    Output:

    Starting one
    Starting two
    two [priority = 5] finished executing.
    one [priority = 8] finished executing.
    
  19. String toString(): This method returns a string representation of this Thread group.

    Syntax: public String toString().
    Returns: String equivalent of the group.
    Exception: SecurityException - if the current thread 
    cannot modify this thread group.
    




    // Java code illustrating toString() method
    import java.lang.*;
    class NewThread extends Thread 
    {
        NewThread(String threadname, ThreadGroup tgob)
        {
            super(tgob, threadname);
            start();
        }
    public void run()
        {
      
            for (int i = 0; i < 10; i++) 
            {
                try 
                {
                    Thread.sleep(10);
                }
                catch (InterruptedException ex) 
                {
                  System.out.println("Thread " + Thread.currentThread().getName()
                                       + " interrupted");
                }
            }
            System.out.println(Thread.currentThread().getName() + 
                  " finished executing");
        }
    public class ThreadGroupDemo 
    {
        public static void main(String arg[]) throws InterruptedException,
            SecurityException, Exception
        {
            // creating the thread group
            ThreadGroup gfg = new ThreadGroup("Parent thread");
            ThreadGroup gfg_child = new ThreadGroup(gfg, "child thread");
      
            // daemon status is set to true
            gfg.setDaemon(true);
      
            // daemon status is set to true
            gfg_child.setDaemon(true);
            NewThread t1 = new NewThread("one", gfg);
            System.out.println("Starting " + t1.getName());
            NewThread t2 = new NewThread("two", gfg);
            System.out.println("Starting " + t2.getName());
      
            // string equivalent of the parent group
            System.out.println("String equivalent: " + gfg.toString());
        }
    }

    
    

    Output:

    Starting one
    Starting two
    String equivalent: java.lang.ThreadGroup[name=Parent thread, maxpri=10]
    one finished executing
    two finished executing
    


Similar Reads

Java.lang.Class class in Java | Set 1
Java provides a class with name Class in java.lang package. Instances of the class Class represent classes and interfaces in a running Java application. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. It has no public constructor. Class objects are cons
15+ min read
Java.lang.Class class in Java | Set 2
Java.lang.Class class in Java | Set 1 More methods: 1. int getModifiers() : This method returns the Java language modifiers for this class or interface, encoded in an integer. The modifiers consist of the Java Virtual Machine's constants for public, protected, private, final, static, abstract and interface. These modifiers are already decoded in Mo
15+ min read
Java.lang.StrictMath class in Java | Set 2
Java.lang.StrictMath Class in Java | Set 1More methods of java.lang.StrictMath class 13. exp() : java.lang.StrictMath.exp(double arg) method returns the Euler’s number raised to the power of double argument. Important cases: Result is NaN, if argument is NaN.Result is +ve infinity, if the argument is +ve infinity.Result is +ve zero, if argument is
6 min read
java.lang.instrument.ClassDefinition Class in Java
This class is used to bind together the supplied class and class file bytes in a single ClassDefinition object. These class provide methods to extract information about the type of class and class file bytes of an object. This class is a subclass of java.lang.Object class. Class declaration: public final class ClassDefinition extends ObjectConstruc
2 min read
java.lang.reflect.Proxy Class in Java
A proxy class is present in java.lang package. A proxy class has certain methods which are used for creating dynamic proxy classes and instances, and all the classes created by those methods act as subclasses for this proxy class. Class declaration: public class Proxy extends Object implements SerializableFields: protected InvocationHandler hIt han
4 min read
java.lang.MethodType Class in Java
MethodType is a Class that belongs to java.lang package. This class consists of various types of methods that help in most of cases to find the method type based on the input object, or parameters of the method. All the instances of methodType are immutable. This means the objects of the methodType class cannot be overridden by any other objects da
4 min read
java.lang.ref.WeakReference Class In Java
When we create an object in Java, an object isn't weak by default. To create a Weak Reference Object, we must explicitly specify this to the JVM. Why Weak Reference Objects are used: Unlike C/C++, Java supports Dynamic Garbage Collection. This is performed when the JVM runs the Garbage Collector. In order to not waste space, the garbage collector d
3 min read
java.lang.reflect.Parameter Class in Java
java.lang.reflect.Parameter class provides Information about method parameters, including their name and modifiers. It also provides an alternate means of obtaining attributes for the parameter. Some useful methods of Parameter class are: public int getModifiers(): It returns the modifier flags for the parameter represented by this Parameter object
4 min read
java.lang.ref.SoftReference Class in Java
When we create an object in Java, an object isn't soft by default. To create a Soft Reference Object, we must explicitly specify this to the JVM. In Soft reference, even if the object is free for garbage collection then also it's not garbage collected until JVM is in need of memory badly. The objects get cleared from the memory when JVM runs out of
3 min read
java.lang.reflect.Constructor Class in Java
java.lang.reflect.Constructor class is used to manage the constructor metadata like the name of the constructors, parameter types of constructors, and access modifiers of the constructors. We can inspect the constructors of classes and instantiate objects at runtime. The Constructor[] array will have one Constructor instance for each public constru
4 min read
java.lang.ref.ReferenceQueue Class in Java
A ReferenceQueue is a simple data structure onto which the garbage collector places reference objects when the reference field is cleared (set to null). You would use a reference queue to find out when an object becomes softly, weakly, or phantom reachable, so your program can take some action based on that knowledge. For example, a program might p
3 min read
java.lang.reflect.Method Class in Java
java.lang.reflect.Method class provides necessary details about one method on a certain category or interface and provides access for the same. The reflected method could also be a category method or an instance method (including an abstract method). This class allows broadening of conversions to occur when matching the actual parameters to call th
3 min read
java.lang.reflect.ReflectPermission Class in Java
ReflectPermission class extends BasicPermission class. It is a “named” permission i.e it contains a name but no action. It may implement actions on top of BasicPermission, if desired. It is used to get information about the behaviour of Constructors. ConstructorsDescriptionReflectPermission(String name)It is used to create a ReflectPermission with
2 min read
java.lang.reflect.Modifier Class in Java
The java.lang.reflect.Modifier class contains methods used to get information about class, member and method access modifiers. The modifiers are represented as int value with set bits at distinct positions. The int value represents different modifiers. These values are taken from the tables in sections 4.1, 4.4, 4.5, and 4.7 of The JVM Specificatio
7 min read
java.lang.reflect.Field Class in Java
The ability of the software to analyze itself is known as Reflection. This is provided by the java.lang.reflect package and elements in Class .Field serves the same purpose as the whole reflection mechanism, analyze a software component and describe its capabilities dynamically, at run time rather than at compile time .Java, like many other languag
5 min read
java.lang.management.ThreadInfo Class in Java
java.lang.management.ThreadInfo class contains methods to get information about a thread. This information includes: Thread IDThread NameState of the ThreadStack trace of the ThreadThe object upon which the Thread is blockedList of object monitors that are blocked by the ThreadList of ownable synchronizers blocked by the ThreadNumber of times the T
4 min read
java.lang.management.ManagementPermission Class in Java
java.lang.ManagementPermission Class contains abstract methods to determine access to a system resource. Every object has some name. Most permission object also has some "actions" associated with it that tells which activities are permitted by this permission object. Class declaration : public final class ManagementPermission extends BasicPermissio
3 min read
java.lang.ref.PhantomReference Class in Java
When we create an object in Java, an object is strong by default. To create a Phantom Reference Object, we must explicitly specify this to the JVM. Phantom Reference Objects are created as phantom reference object is eligible for garbage collection, but it is not collected instantly. Instead, it is pushed into a ReferenceQueue so that all such enqu
4 min read
java.lang.ref.Reference Class in Java
java.lang.ref.Reference Class is an abstract base class for reference object. This class contains methods used to get information about the reference objects. This class is not a direct subclass because the operations on the reference objects are in close co-operation with the garbage collector. Class declaration: prevent public abstract class Refe
3 min read
Java.lang.Number Class in Java
Most of the time, while working with numbers in java, we use primitive data types. But, Java also provides various numeric wrapper sub classes under the abstract class Number present in java.lang package. There are mainly six sub-classes under Number class.These sub-classes define some useful methods which are used frequently while dealing with num
9 min read
Java.lang.Boolean Class in Java
Java provides a wrapper class Boolean in java.lang package. The Boolean class wraps a value of the primitive type boolean in an object. An object of type Boolean contains a single field, whose type is boolean. In addition, this class provides useful methods like to convert a boolean to a String and a String to a boolean, while dealing with a boolea
8 min read
Java.Lang.Double Class in Java
Double class is a wrapper class for the primitive type double which contains several methods to effectively deal with a double value like converting it to a string representation, and vice-versa. An object of the Double class can hold a single double value. Double class is a wrapper class for the primitive type double which contains several methods
4 min read
Java.Lang.Byte class in Java
In Java, Byte class is a wrapper class for the primitive type byte which contains several methods to effectively deal with a byte value like converting it to a string representation, and vice-versa. An object of the Byte class can hold a single byte value. Constructors of Byte Class There are mainly two constructors to initialize a Byte object- 1.
6 min read
Java.Lang.Long class in Java
Long class is a wrapper class for the primitive type long which contains several methods to effectively deal with a long value like converting it to a string representation, and vice-versa. An object of Long class can hold a single long value. There are mainly two constructors to initialize a Long object- Long(long b): Creates a Long object initial
12 min read
Java.lang.Enum Class in Java
Enum class is present in java.lang package. It is the common base class of all Java language enumeration types. For information about enums, refer enum in java Class Declaration public abstract class Enum&lt;E extends Enum&gt; extends Object implements Comparable, Serializable As we can see, that Enum is an abstract class, so we can not create obje
8 min read
Java.lang.Character.Subset Class in Java
Character.Subset Class represents particular subsets of the Unicode(standards using hexadecimal values to express characters - 16bit) character set. The subset, it defines in Character set is UnicodeBlock. Declaration : public static class Character.Subset extends Object Constructors : protected Character.Subset(String str) : Constructs new subset
2 min read
Java.lang.Math Class in Java | Set 2
Java.lang.Math Class in Java | Set 1 More Methods: cosh() : java.lang.Math.cosh() method returns the hyperbolic cosine of the argument passed. Special cases : Result is NaN, if argument is NaN. Result is 1.0, if the argument is zero. Result is +ve infinity, if argument is infinite. Syntax: public static double cosh(double arg) Parameters: arg - The
6 min read
Java.lang.Character.UnicodeBlock Class in Java
Character.UnicodeBlock Class represents particular Character blocks of the Unicode(standards using hexadecimal values to express characters - 16 bit) specifications. Character Blocks define characters used for specific purpose. Declaration : public static final class Character.UnicodeBlock extends Character.Subset Methods of Character.UnicodeBlock
2 min read
Java.lang.Void Class in Java
Java.lang.Void class is a placeholder that holds a reference to a class object if it represents a void keyword. It is an uninstantiable placeholder. Well, uninstantiable means that this class has a private constructor and no other constructor that we can access from outside. Methods of lang.void class is all inherited from Object class in Java: get
1 min read
Java.lang.Runtime class in Java
In Java, the Runtime class is used to interact with Every Java application that has a single instance of class Runtime that allows the application to interface with the environment in which the application is running. The current runtime can be obtained from the getRuntime() method. Methods of Java Runtime classMethod Action PerformedaddShutdownHoo
6 min read
Article Tags :
Practice Tags :