精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

什么是線程組?你學會了嗎?

開發 前端
線程組的出現更多的是便于有組織的管理線程,比如 Java 的線程池就用到了線程組,更多的線程知識,我們在后續的文章中會進行介紹。

一、簡介

在之前的多線程系列文章中,我們陸陸續續的介紹了Thread線程類相關的知識和用法,其實在Thread類上還有一層ThreadGroup類,也就是線程組。

今天我們就一起來簡單的聊聊線程組相關的知識和用法。

二、什么是線程組

線程組,簡單來說就是多個線程的集合,它的出現主要是為了更方便的管理線程。

從結構角度看,線程組與線程之間其實是一個父子結構,一個線程組可以擁有幾個線程,同時也可以擁有幾個線程組。整個組織結構像一棵樹一樣,每個線程一定有一個線程組,線程組可能又有一個父線程組,追溯到根節點就是一個系統線程組。

線程組與線程之間的關系,可以用如下圖來描述。

圖片圖片

比如,我們通常創建的main方法,對應的是main線程,它所屬的是main線程組,main線程組的父級是是system系統線程組。

public static void main(String[] args) {
    Thread currentThread = Thread.currentThread();
    ThreadGroup currentThreadGroup = currentThread.getThreadGroup();
    ThreadGroup systemThreadGroup = currentThreadGroup.getParent();
    System.out.println("currentThread:" + currentThread.getName());
    System.out.println("currentThreadGroup:" + currentThreadGroup.getName());
    System.out.println("systemThreadGroup:" + systemThreadGroup.getName());
}

輸出結果如下:

currentThread:main
currentThreadGroup:main
systemThreadGroup:system

其中system線程組就是根節點,再上一層就沒有了,如果調用會拋空指針異常。

線程組最主要的作用是:可以實現批量管理線程或者線程組,有效的對線程或者線程組對象進行檢查、嘗試中斷等操作。

下面我們就一起來看看ThreadGroup的常用方法和使用技巧。

三、線程組用法詳解

3.1、構造方法介紹

ThreadGroup提供了兩個構造方法,內容如下:

方法

描述

ThreadGroup(String name)

根據線程組名稱創建線程組,其父線程組為main線程組

ThreadGroup(ThreadGroup parent, String name)

根據線程組名稱創建線程組,其父線程組為指定的 parent 線程組

其中支持指定父級線程組的方法,在實際的使用中比較常見。

下面,我們演示一下這兩個構造函數的用法:

public static void main(String[] args) {
    ThreadGroup subThreadGroup1 = new ThreadGroup("sub1");
    ThreadGroup subThreadGroup2 = new ThreadGroup(subThreadGroup1, "sub2");
    System.out.println("sub1 parent thread group name:" + subThreadGroup1.getParent().getName());
    System.out.println("sub2 parent thread group name:" + subThreadGroup2.getParent().getName());
}

輸出結果如下:

sub1 parent thread group name:main
sub2 parent thread group name:sub1

3.2、核心方法介紹

ThreadGroup提供了很多有用的方法,下面整理了一些方法的簡要介紹,內容如下:

方法

描述

public final String getName()

返回此線程組的名稱

public final ThreadGroup getParent()

返回此線程組的父級

public final boolean parentOf(ThreadGroup g)

測試此線程組是線程組參數還是其父級線程組之一

public int activeCount()

返回此線程組及其子組中活動線程的數量的估計值,遞歸遍歷該線程組中所有的子組,此方法主要用于調試和監視目的

public int activeGroupCount ()

返回此線程組及其子組中活動組的數目的估計值。遞歸遍歷該線程組中的所有子群,此方法主要用于調試和監視目的

public final void checkAccess()

確定當前運行的線程是否具有修改此線程組的權限

public int enumerate(Thread[] list)

將這個線程組復制到它所在的組及其子組中

public final void destroy()

銷毀此線程組及其所有子組,當線程組還要子線程或者子線程組,會拋異常

public boolean isDestroyed()

測試此線程組是否已被銷毀

public final int getMaxPriority()

返回此線程組的最大優先級

public final void setMaxPriority(int pri)

設置組的最大優先級。線程組中具有較高優先級的線程不會受到影響

public final boolean isDaemon()

測試此線程組是否是守護線程組

public final void setDaemon(boolean daemon)

修改此線程組的守護進程狀態

public final void interrupt()

嘗試中斷此線程組中的所有線程

public void list()

將此線程組的信息打印到標準輸出。此方法僅用于調試

下面我們抽取幾個比較常見的方法,進行演示介紹。

3.2.1、activeCount 方法

activeCount()方法用于返回此線程組及其子組中活動線程的數量的估計值,因為線程的數量是動態發生變化的,返回的值只是一個估計值。

我們看一個簡單的例子就知道了。

public class MyThread extends Thread{

    public MyThread(ThreadGroup group, String name) {
        super(group, name);
    }

    @Override
    public void run() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class MyThreadMainTest {

    public static void main(String[] args) throws Exception {
        ThreadGroup tg = new ThreadGroup("group1");
        MyThread t1 = new MyThread (tg, "t1");
        MyThread t2 = new MyThread (tg, "t2");
        t1.start();
        t2.start();

        System.out.println("線程組的名稱:" +  tg.getName() + ",活動的線程數:" +  tg.activeCount());
        Thread.sleep(1000);
        System.out.println("線程組的名稱:" +  tg.getName() + ",活動的線程數:" +  tg.activeCount());
    }
}

輸出結果如下:

線程組的名稱:group1,活動的線程數:2
線程組的名稱:group1,活動的線程數:0

第一次檢查線程都處于運行狀態,因此活動的線程數為 2;過 1 秒之后,線程運行結束,活動的線程數為 0。

3.2.2、isDaemon 方法

setDaemon()方法用于測試此線程組是否是守護線程組。

需要注意的是:后臺線程組和后臺線程是兩個概念,后臺線程組的特性是最后一個線程執行完或最后一個線程被銷毀時,后臺線程組自動銷毀,線程組只是為了統一管理線程的一個方式,跟后臺線程有區別!

例子如下:

public class MyThread extends Thread{

    public MyThread(ThreadGroup group, String name) {
        super(group, name);
    }

    @Override
    public void run() {
        System.out.println("當前線程:" + Thread.currentThread().getName() + ",是否后臺線程:" +  Thread.currentThread().isDaemon());
        System.out.println("當前線程組:" + Thread.currentThread().getThreadGroup().getName() + ",是否后臺線程組:" +  Thread.currentThread().getThreadGroup().isDaemon());
    }
}
public class MyThreadMainTest4 {

    public static void main(String[] args) throws Exception {
        ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
        new MyThread(mainGroup, "t1").start();

        Thread.sleep(100);

        // 設置守護線程組
        ThreadGroup tg = new ThreadGroup("group1");
        tg.setDaemon(true);
        new MyThread(tg,"t2").start();
    }
}

輸出結果如下:

當前線程:t1,是否后臺線程:false
當前線程組:main,是否后臺線程組:false
當前線程:t2,是否后臺線程:false
當前線程組:group1,是否后臺線程組:true
3.2.3、interrupt 方法

interrupt()方法用于嘗試中斷此線程組中的所有線程。如果正在運行的線程沒有進入阻塞,是無法中斷的。

例子如下:

public class MyThreadA extends Thread{

    public MyThreadA(ThreadGroup group, String name) {
        super(group, name);
    }

    @Override
    public void run() {
        System.out.println("線程:" + Thread.currentThread().getName() + ",開始運行");
        String t;
        for (int i = 0; i < 1000000000; i++) {
            t = i + "";
        }
        System.out.println("線程:" + Thread.currentThread().getName() + ",停止運行");
    }
}
public class MyThreadB extends Thread{

    public MyThreadB(ThreadGroup group, String name) {
        super(group, name);
    }

    @Override
    public void run() {
        System.out.println("線程:" + Thread.currentThread().getName() + ",開始運行");
        while (!Thread.interrupted()){
        }
        System.out.println("線程:" + Thread.currentThread().getName() + ",停止運行");
    }
}
public class MyThreadC extends Thread{

    public MyThreadC(ThreadGroup group, String name) {
        super(group, name);
    }

    @Override
    public void run() {
        System.out.println("線程:" + Thread.currentThread().getName() + ",開始運行");
        try {
            Thread.sleep(1000);
        } catch (Exception e){
//            e.printStackTrace();
        }
        System.out.println("線程:" + Thread.currentThread().getName() + ",停止運行");
    }
}
public class MyThreadMainTest {

    public static void main(String[] args) throws Exception {
        ThreadGroup tg = new ThreadGroup("group1");
        new MyThreadA(tg,"t1").start();
        new MyThreadB(tg,"t2").start();
        new MyThreadC(tg,"t3").start();

        // 嘗試中斷線程組里面的線程
        tg.interrupt();
    }
}

輸出結果如下:

線程:t1,開始運行
線程:t2,開始運行
線程:t2,停止運行
線程:t3,開始運行
線程:t3,停止運行

線程t1只有等它運行結束,通過interrupt()不能中斷程序!

四、小結

本文主要圍繞線程組的一些基本概念以及常用方法,并結合了一些簡單示例進行介紹。

線程組的出現更多的是便于有組織的管理線程,比如 Java 的線程池就用到了線程組,更多的線程知識,我們在后續的文章中會進行介紹。

如果有描述不對的地方,歡迎網友留言指出。

五、參考

1、https://www.cnblogs.com/xrq730/p/4856072.html

2、https://cloud.tencent.com/developer/article/1633465

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2023-01-28 09:50:17

java多線程代碼

2023-01-31 08:19:53

二進制元素數量

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2024-02-04 00:00:00

Effect數據組件

2023-01-10 08:43:15

定義DDD架構

2023-03-17 16:44:44

Channel進程模型

2023-01-28 10:40:56

Java虛擬機代碼

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-08-09 08:17:07

SSH服務器架構

2022-11-18 12:03:01

2024-11-28 10:32:32

2023-06-15 14:10:00

kubeletCNI插件

2023-12-27 09:32:47

SQL語句數據

2023-01-30 09:01:54

圖表指南圖形化

2024-05-06 00:00:00

InnoDBView隔離

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2023-12-12 08:02:10

點贊
收藏

51CTO技術棧公眾號

深夜福利91大全| 91福利国产成人精品照片| 国产精品xxx在线观看www| 国产成人精品片| 精品国内自产拍在线观看视频| 欧美午夜久久久| 日本福利视频导航| 日韩大胆视频| 久久66热re国产| 国精产品一区一区三区有限在线| 97超碰在线资源| **爰片久久毛片| 在线观看日韩毛片| 久久99久久99精品| h视频在线免费| 成人午夜视频网站| 国产精品中文字幕在线| jizz国产免费| 偷偷www综合久久久久久久| 精品国产精品网麻豆系列| 黄色一级二级三级| free性欧美16hd| 中日韩av电影| 精品亚洲欧美日韩| 99热这里只有精品99| 久久精品在线| 午夜精品久久久久久99热| 欧美88888| 少妇精品久久久| 日韩av在线天堂网| 亚洲成人精品在线播放| 欧美成a人片免费观看久久五月天| 亚洲国产精品久久艾草纯爱| 老司机av福利| 在线激情免费视频| 久久久久久日产精品| 成人资源av| 国产精品久久无码一三区| 噜噜噜躁狠狠躁狠狠精品视频| 欧美精品在线免费播放| 日韩在线视频免费看| 精品久久久久久久久久久aⅴ| 亚洲第一中文字幕在线观看| 深夜福利网站在线观看| 欧美日韩免费电影| 在线观看国产91| 国产免费成人在线| 伊人久久综合一区二区| 五月综合激情日本mⅴ| 男人天堂新网址| a在线免费观看| 自拍av一区二区三区| 亚洲色图自拍| 99视频在线观看地址| 国产欧美视频在线观看| 日本一区免费看| 每日更新在线观看av| 久久久99精品免费观看| 欧美精品123| 四虎影院在线播放| 99久久久精品| 鲁丝片一区二区三区| 三级小视频在线观看| 成人激情动漫在线观看| 国产精品亚洲综合| 神马午夜精品95 | wwwxxx色| 亚洲一区二区三区日本久久九 | 天天干天天舔天天射| av亚洲产国偷v产偷v自拍| 国内精品视频免费| 日本私人网站在线观看| 国产色综合一区| 亚洲 国产 日韩 综合一区| 午夜在线视频播放| 亚洲美女视频在线观看| 91看片淫黄大片91| bl视频在线免费观看| 欧美日韩另类在线| 国产免费999| 伊人久久大香| 欧美变态tickle挠乳网站| 又黄又爽的网站| 免费视频一区三区| 久久精品在线视频| 国产一二三四在线| 日韩成人精品在线观看| 91久久国产精品91久久性色| 亚洲美女综合网| 久久先锋影音av鲁色资源网| 四虎永久国产精品| h片在线免费| 欧美日韩中文在线| 在线免费看污网站| 六月丁香久久丫| 在线观看国产精品淫| 久久97人妻无码一区二区三区| 一级成人国产| 91系列在线观看| 日韩a在线观看| 亚洲丝袜另类动漫二区| 国产美女无遮挡网站| 99精品美女视频在线观看热舞| 欧美大片在线观看| www.黄色在线| 伊人精品视频| 国产欧美在线视频| 午夜小视频在线播放| 久久精品日产第一区二区三区高清版 | 97人妻精品一区二区三区软件 | 国产高清一区视频| 男人天堂综合| 亚洲精品第1页| 国模杨依粉嫩蝴蝶150p| 香蕉大人久久国产成人av| 亚洲日本中文字幕| 国产一级片免费| 狠狠狠色丁香婷婷综合久久五月| 久久免费视频1| 亚洲婷婷噜噜| 欧美电影在线免费观看| 波多野结衣一二三四区| 99视频精品| 99久久精品免费看国产一区二区三区 | 永久免费看mv网站入口| 另类国产ts人妖高潮视频| 91亚色免费| 免费黄网站在线播放| 欧美综合久久久| 老牛影视av老牛影视av| 国产精品入口| 国产视频不卡| 欧美女同一区| 欧美一区二区三区免费观看视频| www.黄色在线| 久久综合图片| 久久一区二区三区欧美亚洲| 日韩免费影院| 91精品国产日韩91久久久久久| 国产黄色大片免费看| 蜜桃av一区| 久久久久国产精品视频| 男女在线视频| 精品成人一区二区三区四区| 欧美三级日本三级| 国产精品亚洲午夜一区二区三区| 国产精品夜夜夜爽张柏芝| 国产精品久久久久久妇女| 尤物tv国产一区| 国产第一页在线观看| 久久久99久久精品欧美| 美女喷白浆视频| 国内黄色精品| 国产精品稀缺呦系列在线| 中文字幕日本在线| 欧美日韩国产高清一区二区 | 天天干天天插天天操| 精品国产1区2区| 右手影院亚洲欧美| 久久精品电影| 亚洲欧美丝袜| 高清久久精品| 久久久久久久久久国产| 欧美在线 | 亚洲| 精品女同一区二区三区在线播放| 欧美日韩一区二区三区四区五区六区| 亚洲午夜久久久久久尤物| 国产精品夜夜夜一区二区三区尤| 啊啊啊久久久| 亚洲精品v天堂中文字幕| 欧美亚洲另类小说| 国产精品久久久一本精品 | 亚洲男男av| 欧美福利在线观看| 无码国产精品96久久久久| 黑人巨大精品欧美一区二区三区| 国产精品三级在线观看无码| 日本成人中文字幕| 亚洲ai欧洲av| 免费看日产一区二区三区| 久久久久久12| 久久手机免费观看| 在线播放91灌醉迷j高跟美女 | 在线免费黄色| 精品免费视频一区二区| 欧美黄色一级大片| 亚洲人成小说网站色在线| 欧美性生交xxxxx| 视频一区二区欧美| 日本免费黄色小视频| 久久超级碰碰| 国产原创欧美精品| 91九色国产在线播放| 亚洲人成网7777777国产| 国产乱淫a∨片免费观看| 亚洲成人一区二区在线观看| 91精品国自产在线| 成人午夜激情影院| 污网站免费在线| 亚洲国产影院| 在线视频不卡一区二区| 久久国产精品免费精品3p| 成人福利网站在线观看| 在线免费日韩片| 九九久久综合网站| 成人在线观看网站| 亚洲黄页视频免费观看| 97精品人妻一区二区三区香蕉| 五月婷婷久久丁香| 日韩欧美123区| 久久精品日产第一区二区三区高清版 | av高清久久久| 欧美性受xxxx黒人xyx性爽| 久久久国产精品一区二区中文| 国产精品免费看久久久无码| 不卡一区2区| 好吊色欧美一区二区三区视频| 亚洲资源在线| 国产精品高潮呻吟久久av无限| 阿v视频在线观看| 久久99精品久久久久久噜噜| www黄在线观看| 亚洲欧美在线第一页| 男人天堂综合网| 日韩欧美一二三四区| 在线免费一级片| 在线精品视频一区二区| 久久国产视频播放| 亚洲最色的网站| 三级影片在线看| 国产精品久久久久桃色tv| 欧美丰满美乳xxⅹ高潮www| 99久久久无码国产精品| 亚洲欧美日韩色| 成人国产电影网| 亚洲av成人片无码| 国产成人精品亚洲日本在线桃色| 爽爽爽在线观看| 国产一区二区美女| 国产精品久久久久久久99| 国产尤物一区二区| www.亚洲自拍| 国产成a人无v码亚洲福利| 97超碰人人看| 国产.精品.日韩.另类.中文.在线.播放| 亚洲免费黄色录像| 紧缚奴在线一区二区三区| 久热在线视频观看| 国产一区二区日韩精品| 亚洲精品成人无码毛片| 成人av免费在线观看| 亚洲啪av永久无码精品放毛片 | 日本熟伦人妇xxxx| 午夜在线电影亚洲一区| 成人毛片18女人毛片| 色综合激情久久| 成人黄色片在线观看| 欧美日韩高清在线播放| 国产熟女一区二区三区五月婷| 欧美一区二区观看视频| 亚洲风情第一页| 亚洲精品久久久一区二区三区 | 六月婷婷中文字幕| 亚洲黄页网在线观看| 国产小视频在线| 中文字幕日韩综合av| 黄视频网站在线| 国外成人在线播放| 手机看片久久| 成人黄色中文字幕| 红杏aⅴ成人免费视频| 免费国产一区| 欧美电影免费| 日韩一级片免费视频| 久久一日本道色综合久久| 中文字幕成人在线视频| 成人综合婷婷国产精品久久蜜臀| 国产精品无码在线| 欧美经典一区二区三区| 丝袜 亚洲 另类 欧美 重口| 亚洲.国产.中文慕字在线| 久久久久久久亚洲| 日韩一区二区三区在线视频| 亚洲色偷精品一区二区三区| 自拍偷拍亚洲一区| 国产丝袜在线播放| 国产精品www色诱视频| 日本精品视频| 欧洲在线视频一区| 欧美精品大片| www.xxx亚洲| 成人免费视频网站在线观看| 蜜桃传媒一区二区亚洲| 一级精品视频在线观看宜春院| 国产精品久久久久久久久久久久久久久久久 | 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩精品免费一区二区在线观看 | 日本午夜精品电影| 欧美精品99| 亚洲最大综合网| 福利一区二区在线观看| 国产性猛交xx乱| 五月天视频一区| av观看在线免费| 中文字幕九色91在线| 国产调教在线| 99视频国产精品免费观看| 成人看的羞羞网站| 国产免费黄色av| 高潮精品一区videoshd| 日韩视频中文字幕在线观看| 欧美性欧美巨大黑白大战| 色播色播色播色播色播在线 | 中文字幕制服丝袜在线| 久久国产高清| 波多野结衣影院| 一区二区三区高清| 一二区在线观看| 一区二区在线视频播放| 97成人资源| 精品欧美一区二区久久久伦| 欧美黄色一区| 五月天婷婷影视| 欧美激情在线一区二区三区| 手机在线看片1024| 亚洲精品大尺度| 国精一区二区三区| av日韩中文字幕| 欧美在线三区| 青青草原播放器| 日韩一区中文字幕| 亚洲一区二区影视| 中文字幕亚洲在线| 美女色狠狠久久| 亚洲高清资源综合久久精品| 日本麻豆一区二区三区视频| 亚洲一二三精品| 欧美日韩国产在线观看| 中文字幕日本在线| 91久久国产精品| 综合久久精品| 亚洲欧洲日韩综合| 亚洲一本大道在线| 日韩一级片免费在线观看| 午夜免费久久久久| 性人久久久久| 爆乳熟妇一区二区三区霸乳| 国产日韩亚洲欧美综合| www.五月婷婷.com| 日韩中文综合网| 欧美特黄不卡| 波多野结衣av一区二区全免费观看| 国产激情一区二区三区桃花岛亚洲 | 国产日韩视频在线| 国产小视频精品| 亚洲欧洲性图库| av小说天堂网| 久久久中文字幕| 神马影视一区二区| www.久久久精品| 亚洲综合无码一区二区| 色资源在线观看| 国产狼人综合免费视频| 一区二区日韩欧美| 亚洲男女在线观看| 欧美自拍偷拍一区| 午夜小视频福利在线观看| 国产有色视频色综合| 久久免费黄色| 欧美大片xxxx| 日韩av网址在线观看| 99久久婷婷国产综合精品首页| 手机成人av在线| 不卡欧美aaaaa| 国产乱码在线观看| 欧美激情第6页| 国产精品片aa在线观看| www.桃色.com| 精品高清一区二区三区| 在线国产91| 国产青春久久久国产毛片| 日本一不卡视频| 激情五月婷婷小说| 亚洲一二三在线| 999久久久久久久久6666| 欧美成人精品欧美一级乱| 成人免费视频在线观看| 天天舔天天干天天操| 成人福利视频在线观看| 国产日韩1区| 看免费黄色录像| 亚洲免费影视第一页| 涩涩屋成人免费视频软件| 欧美性猛交久久久乱大交小说 | 天天爱天天做天天爽| 欧美激情视频一区二区三区不卡| 国产成人三级| av电影在线播放| 91精品在线麻豆| 视频精品导航|