Java ThreadGroup 类

描述

Java ThreadGroup getParent()方法返回该线程组的父线程组名称。

声明

以下是java.lang.ThreadGroup.getParent()方法的声明

public final ThreadGroup getParent() 

    参数

    返回值

    该方法返回该线程组的父线程组。顶级线程组是唯一一个其父级为 null 的线程组。

    异常

    示例 1

    以下内容示例显示了在单个 ThreadGroup 对象的情况下 ThreadGroup getParent() 方法的用法。我们创建了一个 ThreadGroup 对象并为其分配了一个名称。然后我们使用之前创建的线程组对象创建了两个线程。使用 getParent() 方法,我们获取该线程组对象的父对象的名称,该对象将成为 main。

    package com.yxjc123;
    public class ThreadGroupDemo implements Runnable {
       public static void main(String[] args) {
          ThreadGroupDemo tg = new ThreadGroupDemo();
          tg.start();
       }
       public void start() {
          try {     
             //创建一个ThreadGroup
             ThreadGroup threadGroup = new ThreadGroup("ThreadGroup");
    
             //创建一个线程
             Thread t1 = new Thread(threadGroup, this);
             System.out.println("Starting " + t1.getName() + "...");
             t1.start();
                
             //创建另一个线程
             Thread t2 = new Thread(threadGroup, this);
             System.out.println("Starting " + t2.getName() + "...");
             t2.start();
    
             //返回线程组父级的名称
             String name = threadGroup.getParent().getName();
             System.out.println("Name of parent of the threadGroup = " + name);
    
             // 阻塞直到其他线程完成
             t1.join();
             t2.join();        
    
    
          } catch (InterruptedException ex) {
             System.out.println(ex.toString());
          }
       }
    
       // 实现 run()
       public void run() {
    
          for(int i = 0; i < 4;i++) {
             i++;
             try {
                Thread.sleep(50);
             } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
             }
          }
          System.out.println(Thread.currentThread().getName() + " finished executing.");
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    输出

    让我们编译并运行上面的程序,这将产生以下结果 -

    Starting Thread-0...
    Starting Thread-1...
    Name of parent of the threadGroup = main
    Thread-1 finished executing.
    Thread-0 finished executing. 
    • 1
    • 2
    • 3
    • 4

    示例 2

    以下示例显示了在多个 ThreadGroup 对象的情况下 ThreadGroup getParent() 方法的用法。我们创建了一个 ThreadGroup 对象并为其分配了一个名称。接下来,我们创建了一个子 ThreadGroup 对象。然后我们使用之前创建的线程组对象创建了两个线程。使用 getParent() 方法,我们打印每个线程组对象的父级名称。

    package com.yxjc123;
    public class ThreadGroupDemo implements Runnable {
       public static void main(String[] args) {
          ThreadGroupDemo tg = new ThreadGroupDemo();
          tg.start();
       }
    
       public void start() {
          try {     
             //创建父ThreadGroup
             ThreadGroup pThreadGroup = new ThreadGroup("parent ThreadGroup");
    		 
             //为父ThreadGroup创建子ThreadGroup
             ThreadGroup cThreadGroup = new ThreadGroup(pThreadGroup, "child ThreadGroup");
    
             //创建一个线程
             Thread t1 = new Thread(pThreadGroup, this);
             System.out.println("Starting " + t1.getName() + "...");
             t1.start();
                
             //创建另一个线程
             Thread t2 = new Thread(cThreadGroup, this);
             System.out.println("Starting " + t2.getName() + "...");
             t2.start();
    
             //返回线程组名称
             String name = pThreadGroup.getParent().getName();
             System.out.println("Name of parent of pThreadGroup = " + name);
    
             name = cThreadGroup.getParent().getName();
             System.out.println("Name of parent of cThreadGroup = " + name);
             
             // 阻塞直到其他线程完成
             t1.join();
             t2.join();
    
          } catch (InterruptedException ex) {
             System.out.println(ex.toString());
          }
       }
    
       // 实现 run()
       public void run() {
    
          for(int i = 0; i < 4;i++) {
             i++;
             try {
                Thread.sleep(50);
             } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
             }
          }
          System.out.println(Thread.currentThread().getName() + " finished executing.");
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    输出

    让我们编译并运行上面的程序,这将产生以下结果

    Starting Thread-0...
    Starting Thread-1...
    Name of parent of pThreadGroup = main
    Name of parent of cThreadGroup = parent ThreadGroup
    Thread-0 finished executing.
    Thread-1 finished executing. 
    • 1
    • 2
    • 3
    • 4
    • 5

    示例 3

    以下示例显示了 ThreadGroup getParent() 方法在子级和孙级 ThreadGroup 对象的情况下的用法。我们创建了一个 ThreadGroup 对象并为其分配了一个名称。接下来,我们创建了一个子 ThreadGroup 对象。然后,我们使用之前创建的子线程组对象和孙线程组对象创建了两个线程。使用 getParent() 方法,我们打印每个线程组对象的父级名称。

    package com.yxjc123;
    public class ThreadGroupDemo implements Runnable {
       public static void main(String[] args) {
          ThreadGroupDemo tg = new ThreadGroupDemo();
          tg.start();
       }
       public void start() {
          try {     
             //创建父ThreadGroup
             ThreadGroup pThreadGroup = new ThreadGroup("Parent ThreadGroup");
    		 
             //为父ThreadGroup创建子ThreadGroup
             ThreadGroup cThreadGroup = new ThreadGroup(pThreadGroup, "Child ThreadGroup");
    		 
             //为父ThreadGroup创建孙ThreadGroup
             ThreadGroup gThreadGroup = new ThreadGroup(cThreadGroup, "GrandChild ThreadGroup");
    
             //创建一个线程
             Thread t1 = new Thread(cThreadGroup, this);
             System.out.println("Starting " + t1.getName() + "...");
             t1.start();
                
             //创建另一个线程
             Thread t2 = new Thread(gThreadGroup, this);
             System.out.println("Starting " + t2.getName() + "...");
             t2.start();
                
             //返回线程组父级的名称
             String name = pThreadGroup.getParent().getName();
             System.out.println("Name of pThreadGroup = " + name);
    
             name = cThreadGroup.getParent().getName();
             System.out.println("Name of cThreadGroup = " + name);
    
             name = gThreadGroup.getParent().getName();
             System.out.println("Name of gThreadGroup = " + name);
    
             // 阻塞直到其他线程完成
             t1.join();
             t2.join();
          } catch (InterruptedException ex) {
             System.out.println(ex.toString());
          }
       }
    
       // 实现 run()
       public void run() {
    
          for(int i = 0; i < 4;i++) {
             i++;
             try {
                Thread.sleep(50);
             } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
             }
          }
          System.out.println(Thread.currentThread().getName() + " finished executing.");
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    输出

    让我们编译并运行上面的程序,这将产生以下结果−

    Starting Thread-0...
    Starting Thread-1...
    Name of pThreadGroup = main
    Name of cThreadGroup = Parent ThreadGroup
    Name of gThreadGroup = Child ThreadGroup
    Thread-1 finished executing.
    Thread-0 finished executing. 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6