Java執行緒組


Java提供了一種在單個物件中組合多個執行緒的便捷方法。通過這種方式,通過單個方法呼叫暫停,恢復或中斷執行緒組。

注意: 現在不推薦使用suspend()resume()stop()方法。

Java執行緒組由java.lang.ThreadGroup類實現。

ThreadGroup表示一組執行緒。 執行緒組還可以包括其他執行緒組。 執行緒組建立一個樹,其中除初始執行緒組之外的每個執行緒組都具有父執行緒。

允許執行緒存取有關其自己的執行緒組的資訊,但它無法存取有關其執行緒組的父執行緒組或任何其他執行緒組的資訊。

ThreadGroup類別建構函式

ThreadGroup類只有兩個建構函式。

編號 建構函式 描述
1 ThreadGroup(String name) 建立具有給定名稱的執行緒組。
2 ThreadGroup(ThreadGroup parent, String name) 建立具有給定父組和名稱的執行緒組。

ThreadGroup類的方法

ThreadGroup類中有許多方法,下面給出了ThreadGroup方法的列表。

編號 方法 描述
1 void checkAccess() 此方法確定當前執行的執行緒是否具有修改執行緒組的許可權。
2 int activeCount() 此方法返回執行緒組及其子組中活動執行緒數的估計值。
3 int activeGroupCount() 此方法返回執行緒組及其子組中活動組數量的估計值。
4 void destroy() 此方法會銷毀執行緒組及其所有子組。
5 int enumerate(Thread[] list) 此方法將執行緒組及其子組中的每個活動執行緒複製到指定的陣列中。
6 int getMaxPriority() 此方法返回執行緒組的最大優先順序。
7 String getName() 此方法返回執行緒組的名稱。
8 ThreadGroup getParent() 此方法返回執行緒組的父級。
9 void interrupt() 此方法中斷執行緒組中的所有執行緒。
10 boolean isDaemon() 此方法測試執行緒組是否為守護程式執行緒組。
11 void setDaemon(boolean daemon) 此方法更改執行緒組的守護程式狀態。
12 boolean isDestroyed() 此方法測試此執行緒組是否已被銷毀。
13 void list() 此方法將有關執行緒組的資訊列印到標準輸出。
14 boolean parentOf(ThreadGroup g) 此方法測試執行緒組是執行緒組引數還是其祖先執行緒組之一。
15 void suspend() 此方法用於掛起執行緒組中的所有執行緒。
16 void resume() 此方法用於恢復使用suspend()方法掛起的執行緒組中的所有執行緒。
17 void setMaxPriority(int pri) 此方法設定組的最大優先順序。
18 void stop() 此方法用於停止執行緒組中的所有執行緒。
19 String toString() 此方法返回執行緒組的字串表示形式。

下面來一個分組多個執行緒的程式碼。

ThreadGroup tg1 = new ThreadGroup("Group A");
Thread t1 = new Thread(tg1,new MyRunnable(),"one");
Thread t2 = new Thread(tg1,new MyRunnable(),"two");
Thread t3 = new Thread(tg1,new MyRunnable(),"three");

現在所有3個執行緒都屬於一個組。 這裡,tg1是執行緒組名稱,MyRunnable是實現Runnable介面的類,「one」,「two」和「three」是執行緒名稱。

現在只能通過一行程式碼中斷所有執行緒。

Thread.currentThread().getThreadGroup().interrupt();

ThreadGroup範例

範例: ThreadGroupDemo.java

package com.yiibai;

public class ThreadGroupDemo implements Runnable {
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        ThreadGroupDemo runnable = new ThreadGroupDemo();
        ThreadGroup tg1 = new ThreadGroup("Parent ThreadGroup");

        Thread t1 = new Thread(tg1, runnable, "one");
        t1.start();
        Thread t2 = new Thread(tg1, runnable, "two");
        t2.start();
        Thread t3 = new Thread(tg1, runnable, "three");
        t3.start();

        System.out.println("Thread Group Name: " + tg1.getName());
        tg1.list();

    }
}

執行上面範例程式碼,得到以下結果:

Thread Group Name: Parent ThreadGroup
three
two
one
java.lang.ThreadGroup[name=Parent ThreadGroup,maxpri=10]
    Thread[one,5,Parent ThreadGroup]
    Thread[two,5,Parent ThreadGroup]
    Thread[three,5,Parent ThreadGroup]