當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。