当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java ThreadGroup enumerate()用法及代码示例


ThreadGroup类enumerate()方法

用法:

    public int enumerate (Thread[] th1);
    public int enumerate (Thread[] th2, boolean recurr1);
    public int enumerate (ThreadGroup[] tg1);
    public int enumerate (ThreadGroup[] tg2, boolean recurr2);
  • enumerate() 方法在 java.lang 包中可用。
  • 枚举 (Thread[] th1) 方法用于复制线程组中的所有活动线程并放入给定的数组 Thread[] 中。
  • 枚举 (Thread[] th2, boolean recurr1) 方法用于复制线程组中的所有活动线程并放入给定数组 Thread[] 但如果给定的布尔变量设置为 true 则还包括对该线程子组中每个活动线程的引用。
  • 枚举 (ThreadGroup[] tg1) 方法用于复制线程组中的所有活动子组并放入给定数组 ThreadGroup[]。
  • 枚举 (ThreadGroup[] tg2, boolean recurr2) 方法用于复制线程组中的所有活动子组并放置到给定数组 ThreadGroup[] 中,但如果给定的布尔变量设置为 true,则还包括对该子组中每个活动子组的引用。这些方法可能会在复制该线程组中所有活动线程时抛出异常。
    SecurityException- 当不允许当前线程枚举此 ThreadGroup 时,可能会抛出此异常。
  • 这些方法是非静态方法,只能通过类对象访问,如果我们尝试使用类名访问这些方法,则会出现错误。

参数:

  • 在第一种情况下,Thread[] th1- 表示 "Thread" 类型的数组,将复制的线程集放入其中。
  • 在第二种情况下,Thread[] th1, boolean recurr1
    • Thread[] th1- 与第一种情况中的定义类似。
    • boolean recurr1- 表示一个标志状态,表示包含线程是作为该线程组的子组的线程组。
  • 在第三种情况下,ThreadGroup[] tg1- 表示 "ThreadGroup" 类型的数组,将复制的线程组集合放入其中。
    • 在第四种情况下,ThreadGroup[] tg2, boolean recurr2
    • ThreadGroup[] tg2- 类似于第三种情况中的定义。
    • boolean recurr2- 表示表示包含线程组的标志状态。

返回值:

在第一种情况下,方法的返回类型是int- 它返回放置到数组中的线程数的计数。

在第二种情况下,方法的返回类型是int- 与第一种情况中的定义类似。

第三种情况,方法的返回类型是int- 它返回放置在数组中的线程组数的计数。

第四种情况,方法的返回类型为int- 类似于第三种情况中的定义。

例:

// Java program to demonstrate the example 
// of enumerate() method of ThreadGroup()class

public class Enumerate implements Runnable {
    public static void main(String[] args) {
        Enumerate en = new Enumerate();
        en.enumerates();
    }

    public void enumerates() {
        try {
            // Create two thread group and the named are base
            // and derived

            ThreadGroup base = new ThreadGroup("Base ThreadGroup");
            ThreadGroup derived = new ThreadGroup(base, "Derived ThreadGroup");

            // create two threads
            Thread th1 = new Thread(base, this);
            Thread th2 = new Thread(derived, this);

            // By using getName() method is to retrieve the
            // name of the thread th1
            System.out.println(th1.getName() + " " + "begins.....");

            // By using start() method is to start its execution 
            // of thread th1
            th1.start();

            // By using getName() method is to retrieve the
            // name of the thread th2
            System.out.println(th2.getName() + " " + "begins.....");

            // By using start() method is to start its execution 
            // of thread th2
            th2.start();

            Thread[] t1 = new Thread[base.activeCount()];
            ThreadGroup[] tg1 = new ThreadGroup[base.activeGroupCount()];

            // By using enumerate() method is to put the
            // copied threads in an array

            System.out.println();
            int cnt1 = base.enumerate(t1);
            for (int i = 0; i < cnt1; ++i) {

                System.out.print("enumerate(Thread[] t1):");
                System.out.println(t1[i].getName() + " " + "exists");
            }

            System.out.println();
            int cnt2 = base.enumerate(t1, true);
            for (int j = 0; j < cnt2; ++j) {

                System.out.print("enumerate(Thread[] t1, boolean recurr):");
                System.out.println(t1[j].getName() + " " + "exists");
            }

            System.out.println();
            int cnt3 = base.enumerate(tg1);
            for (int k = 0; k < cnt3; ++k) {

                System.out.print("enumerate(ThreadGroup[] tg1):");
                System.out.println(tg1[k].getName() + " " + "exists");
            }

            System.out.println();
            int cnt4 = base.enumerate(tg1, true);
            for (int l = 0; l < cnt4; ++l) {

                System.out.print("enumerate(ThreadGroup[] tg1, boolean recurr):");
                System.out.println(tg1[l].getName() + " " + "exists");
            }

            // By using join() method is to wait the current
            // thread till complete execution of another
            // thread
            th1.join();
            th2.join();
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }

    }

    // Override run()
    public void run() {
        for (int k = 0; k < 100; ++k)
            ++k;
        System.out.println(Thread.currentThread().getName() + " " + "ends.....");
    }

}

输出

Thread-0 begins.....
Thread-1 begins.....
Thread-0 ends.....

Thread-1 ends.....
enumerate(Thread[] t1):Thread-1 exists


enumerate(ThreadGroup[] tg1):Derived ThreadGroup exists

enumerate(ThreadGroup[] tg1, boolean recurr):Derived ThreadGroup exists


相关用法


注:本文由纯净天空筛选整理自Preeti Jain大神的英文原创作品 Java ThreadGroup enumerate() method with example。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。