91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中線程組的原理是什么

發布時間:2021-06-17 14:00:54 來源:億速云 閱讀:146 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中線程組的原理是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

線程組

Java中線程組的原理是什么

線程組可以批量管理線程和線程組對象。

一級關聯

例子如下,建立一級關聯。

public class MyThread43 implements Runnable{
  public void run()
  {
    try
    {
      while (!Thread.currentThread().isInterrupted())
      {
        System.out.println("ThreadName = " + Thread.currentThread().getName());
        Thread.sleep(3000);
      }
    }
    catch (InterruptedException e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    MyThread43 mt0 = new MyThread43();
    MyThread43 mt1 = new MyThread43();
    ThreadGroup tg = new ThreadGroup("新建線程組1");
    Thread t0 = new Thread(tg, mt0);
    Thread t1 = new Thread(tg, mt1);
    t0.start();
    t1.start();
    System.out.println("活動的線程數為:" + tg.activeCount());
    System.out.println("線程組的名稱為:" + tg.getName());
  }
}

輸出結果如下

活動的線程數為:2
線程組的名稱為:新建線程組1
ThreadName = Thread-0
ThreadName = Thread-1
ThreadName = Thread-0
ThreadName = Thread-1
ThreadName = Thread-1
ThreadName = Thread-0
ThreadName = Thread-1
ThreadName = Thread-0
······

每隔三秒輸出兩個線程名稱,符合預期。

線程組自動歸組屬性

public class ThreadDomain49 {
  public static void main(String[] args) {
    System.out.println("A處線程:" + Thread.currentThread().getName() + ", 所屬線程:" + Thread.currentThread().getThreadGroup().getName() +
        ", 組中有線程組數量:" + Thread.currentThread().getThreadGroup().activeGroupCount());
    ThreadGroup group = new ThreadGroup("新的組");
    System.out.println("B處線程:" + Thread.currentThread().getName() + ", 所屬線程:" + Thread.currentThread().getThreadGroup().getName() +
        ", 組中有線程組數量:" + Thread.currentThread().getThreadGroup().activeGroupCount());
    ThreadGroup[] tg = new ThreadGroup[Thread.currentThread().getThreadGroup().activeGroupCount()];
    Thread.currentThread().getThreadGroup().enumerate(tg);
    for (int i = 0; i < tg.length; i++)
      System.out.println("第一個線程組名稱為:" + tg[i].getName());
  }
}

輸出結果如下

A處線程:main, 所屬線程:main, 組中有線程組數量:0
B處線程:main, 所屬線程:main, 組中有線程組數量:1
第一個線程組名稱為:新的組

沒有指定線程組,則歸屬到當前線程所屬的組。

根線程組

public class ThreadDomain50 {
  public static void main(String[] args)
  {
    System.out.println(Thread.currentThread().getThreadGroup().getParent().getName());
    System.out.println(Thread.currentThread().getThreadGroup().getParent().getParent().getName());
  }
}

運行結果

system
Exception in thread "main" java.lang.NullPointerException
  at com.advance.MultiThread3.MyThread.ThreadDomain50.main(ThreadDomain50.java:14)

當前線程的線程組的父線程組是系統線程組;系統線程組的父線程組不存在;系統線程組就是根線程組。

批量停止組內線程

請看示例

public class MyThread44 extends Thread{

  public MyThread44(ThreadGroup tg, String name)
  {
    super(tg, name);
  }

  public void run()
  {
    System.out.println("ThreadName = " + Thread.currentThread().getName() +
        "準備開始死循環了");
    while (!this.isInterrupted()){}
    System.out.println("ThreadName = " + Thread.currentThread().getName() +
        "結束了");
  }

  public static void main(String[] args) throws InterruptedException {
    ThreadGroup tg = new ThreadGroup("我的線程組");
    MyThread44 mt = null;
    for (int i = 0; i < 3; i++)
    {
      mt = new MyThread44(tg, "線程" + i);
      mt.start();
    }
    Thread.sleep(5000);
    tg.interrupt();
    System.out.println("調用了interrupt()方法");
  }
}

輸出結果如下

ThreadName = 線程0準備開始死循環了
ThreadName = 線程1準備開始死循環了
ThreadName = 線程2準備開始死循環了
調用了interrupt()方法
ThreadName = 線程0結束了
ThreadName = 線程2結束了
ThreadName = 線程1結束了

可以看到,ThreadGroup的interrupt方法批量中斷線程組的線程。

關于Java中線程組的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马鞍山市| 碌曲县| 长沙县| 房产| 伊金霍洛旗| 高州市| 平泉县| 堆龙德庆县| 礼泉县| 滕州市| 奇台县| 左云县| 黄石市| 元阳县| 祥云县| 读书| 津南区| 普兰店市| 蕲春县| 许昌市| 天门市| 大渡口区| 秦安县| 日喀则市| 汶川县| 十堰市| 资兴市| 农安县| 台湾省| 京山县| 襄汾县| 乐至县| 永济市| 台中市| 合肥市| 洪洞县| 万年县| 都安| 故城县| 海阳市| 察哈|