最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程 線程組原理及實例詳解

 更新時間:2019年09月06日 08:39:07   作者:慢慢來  
這篇文章主要介紹了Java多線程 線程組原理及實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

線程組

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

一級關(guān)聯(lián)

例子如下,建立一級關(guān)聯(lián)。

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("活動的線程數(shù)為:" + tg.activeCount());
    System.out.println("線程組的名稱為:" + tg.getName());
  }
}

輸出結(jié)果如下

活動的線程數(shù)為: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
······

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

線程組自動歸組屬性

public class ThreadDomain49 {
  public static void main(String[] args) {
    System.out.println("A處線程:" + Thread.currentThread().getName() + ", 所屬線程:" + Thread.currentThread().getThreadGroup().getName() +
        ", 組中有線程組數(shù)量:" + Thread.currentThread().getThreadGroup().activeGroupCount());
    ThreadGroup group = new ThreadGroup("新的組");
    System.out.println("B處線程:" + Thread.currentThread().getName() + ", 所屬線程:" + Thread.currentThread().getThreadGroup().getName() +
        ", 組中有線程組數(shù)量:" + 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());
  }
}

輸出結(jié)果如下

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

沒有指定線程組,則歸屬到當(dāng)前線程所屬的組。

根線程組

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());
  }
}

運(yùn)行結(jié)果

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

當(dāng)前線程的線程組的父線程組是系統(tǒng)線程組;系統(tǒng)線程組的父線程組不存在;系統(tǒng)線程組就是根線程組。

批量停止組內(nèi)線程

請看示例

public class MyThread44 extends Thread{

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

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

  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("調(diào)用了interrupt()方法");
  }
}

輸出結(jié)果如下

ThreadName = 線程0準(zhǔn)備開始死循環(huán)了
ThreadName = 線程1準(zhǔn)備開始死循環(huán)了
ThreadName = 線程2準(zhǔn)備開始死循環(huán)了
調(diào)用了interrupt()方法
ThreadName = 線程0結(jié)束了
ThreadName = 線程2結(jié)束了
ThreadName = 線程1結(jié)束了

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nacos?Discovery服務(wù)治理解決方案

    Nacos?Discovery服務(wù)治理解決方案

    DiscoveryClient是專門負(fù)責(zé)服務(wù)注冊和發(fā)現(xiàn)的,我們可以通過它獲取到注冊到注冊中心的所有服務(wù),這篇文章主要介紹了Nacos?Discovery服務(wù)治理,需要的朋友可以參考下
    2022-11-11
  • SpringBoot中如何打印Http請求日志

    SpringBoot中如何打印Http請求日志

    所有針對第三方的請求都強(qiáng)烈推薦打印請求日志,本文主要介紹了SpringBoot中如何打印Http請求日志,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java面向?qū)ο蠡A(chǔ)之多態(tài)性,抽象類和接口

    Java面向?qū)ο蠡A(chǔ)之多態(tài)性,抽象類和接口

    這篇文章主要介紹了Java面向?qū)ο蠡A(chǔ):多態(tài)性,抽象類和接口,文中代碼可以幫助各位更好的理解學(xué)習(xí),有需求的小伙伴可以參考下
    2020-05-05
  • Java for循環(huán)詳解

    Java for循環(huán)詳解

    這篇文章主要介紹了Java for循環(huán)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談java日志格式化

    淺談java日志格式化

    不管我們使用何種語言開發(fā),一旦程序發(fā)生異常,日志是一個很重要的數(shù)據(jù)。但是并不是意味著打印的日志越多越好,我們需要的是有用的日志。下面小編來和大家一起學(xué)習(xí)以下知識
    2019-05-05
  • springboot以FTP方式上傳文件到遠(yuǎn)程服務(wù)器

    springboot以FTP方式上傳文件到遠(yuǎn)程服務(wù)器

    這篇文章主要介紹了springboot以FTP方式上傳文件到遠(yuǎn)程服務(wù)器,需要的朋友可以參考下
    2019-12-12
  • Java多線程編程中使用DateFormat類

    Java多線程編程中使用DateFormat類

    這篇文章主要介紹了Java多線程編程中使用DateFormat類,文中介紹了三種相關(guān)的并發(fā)使用方法,需要的朋友可以參考下
    2015-07-07
  • 圖解Java經(jīng)典算法冒泡排序的原理與實現(xiàn)

    圖解Java經(jīng)典算法冒泡排序的原理與實現(xiàn)

    冒泡排序是一種簡單的排序算法,它也是一種穩(wěn)定排序算法。其實現(xiàn)原理是重復(fù)掃描待排序序列,并比較每一對相鄰的元素,當(dāng)該對元素順序不正確時進(jìn)行交換。一直重復(fù)這個過程,直到?jīng)]有任何兩個相鄰元素可以交換,就表明完成了排序
    2022-09-09
  • 教你bat腳本一鍵配置java開發(fā)環(huán)境

    教你bat腳本一鍵配置java開發(fā)環(huán)境

    公司新入職一名員工,項目經(jīng)理讓我安排新人工作,首先需要對java開發(fā)相關(guān)環(huán)境進(jìn)行配置安裝,但時常會因為安裝配置不到位或者操作錯誤導(dǎo)致時間的浪費,所以在空余時間收集了一系列軟件的免安裝版本,感興趣的朋友一起看看吧
    2021-12-12
  • Java深入講解Bean作用域與生命周期

    Java深入講解Bean作用域與生命周期

    這篇文章主要介紹了淺談Spring中Bean的作用域和生命周期,從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個過程就是一個生命周期。本文將通過示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下
    2022-06-06

最新評論

阳山县| 象州县| 定西市| 南昌县| 道真| 富裕县| 永吉县| 涞水县| 伽师县| 高尔夫| 会昌县| 宁化县| 东光县| 错那县| 昆明市| 新乡县| 盐山县| 苍梧县| 绥芬河市| 宾阳县| 临江市| 德江县| 中山市| 苗栗县| 江陵县| 定日县| 甘孜县| 通道| 巴林右旗| 盐源县| 民权县| 攀枝花市| 陈巴尔虎旗| 皋兰县| 和硕县| 牙克石市| 罗田县| 钟祥市| 吉林市| 太保市| 杂多县|