激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

2020-10-30 23:31動力節(jié)點 Java教程

這篇文章主要介紹了Java多線程的其他知識,需要的朋友可以參考下

一、線程組

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* A thread group represents a set of threads. In addition, a thread
* group can also include other thread groups. The thread groups form
* a tree in which every thread group except the initial thread group
* has a parent.
* <p>
* A thread is allowed to access information about its own thread
* group, but not to access information about its thread group's
* parent thread group or any other thread groups.
*
* @author unascribed
* @version 1.66, 03/13/08
* @since  JDK1.0
*/

一個線程組代表了一系列的線程。并且,一個線程組可以包括其他的線程組。除了初始線程組外,每個線程組都有一個父線程組,類似于樹的結(jié)構(gòu)。

一個線程可以訪問它所在線程組的信息, 不可以訪問它父線程組和其他線程組的信息。

 從這段話中可以大概明白線程組的概念,所有的線程和線程組構(gòu)成一個樹的結(jié)構(gòu),如下:

Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

查看Thread的API,可以看到,創(chuàng)建一個線程可以指定它的線程組和不指定線程組。如果指定其所屬的線程組,那么該線程組是創(chuàng)建它的線程所屬線程組的子線程組。如果不指定線程組,則屬于默認(rèn)情況,該線程和創(chuàng)建它的線程在同一個線程組。

以上面的圖舉個簡單的例子:

如果main線程創(chuàng)建了Thread1線程,沒有指定Thread1所在的線程組,那么Thread1就默認(rèn)和main線程屬于同一個線程組,即系統(tǒng)線程組。

如果main線程創(chuàng)建了Thread3線程,沒指定Thread3所在的線程組為線程組1,那么線程組1就屬于系統(tǒng)線程組,和main線程在樹結(jié)構(gòu)中平級。

一旦某個線程加入了指定線程組之后,該線程將一直屬于該線程組,直到該線程死亡,線程運行中途不能改變它所屬的線程組。因為指定線程所在線程組是在創(chuàng)建線程的視乎完成的,所以之后不能再修改它所在的線程組。

下面是ThreadGroup的方法摘要

Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

Java多線程的其他知識_動力節(jié)點Java學(xué)院整理

二、線程組與未處理的異常

從JDK1.5開始,Java加強了線程的異常處理,如果線程執(zhí)行過程中拋出了一個未處理的異常,JVM在結(jié)束該線程之前會自動查找是否有對應(yīng)的Thread.UncaughtExceptionHandler對象,如果找到該處理器對象,將會調(diào)用該對象的uncaughtException(Thread t,Throwable e)方法來處理該異常。

Thread.UncaughtExceptionHandler是Thread類的一個內(nèi)部公共靜態(tài)接口,該接口內(nèi)只有一個方法:

void uncaughtException(Thread t,Throwable t),該方法中的t代表出現(xiàn)異常的線程,而e代表該線程拋出的異常。

Thread類提供了兩個方法來設(shè)置異常處理器:

?
1
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

線程類的所有線程實例設(shè)置默認(rèn)的異常處理器

?
1
public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)

為指定線程的實例設(shè)置異常處理器

ThreadGroup類實現(xiàn)了Thread.UncaughtExceptionHandler接口,所以每個線程所屬的線程組將會作為默認(rèn)的異常處理器。當(dāng)一個線程拋出未處理的異常時,JVM會首先查找該異常對應(yīng)的異常處理器(setUncaughtExceptionHandler方法設(shè)置的異常處理器),如果找到該異常處理器,將調(diào)用該異常處理器處理該異常,否則,JVM將會調(diào)用該線程所屬的線程組對象的uncaughtException方法來處理該異常,線程組處理異常的流程如下:

1)、如果該線程組有父線程組,則調(diào)用父線程組的uncaughtException方法來處理該異常

2)、否則,如果該線程實例所屬的線程類有默認(rèn)的異常處理器(由setDefaultUncaughtExceptionHandler方法設(shè)置的異常處理器),那么就調(diào)用該異常處理器來處理該異常

3)、否則,將異常調(diào)試棧的信息打印到System.err錯誤輸出流,并結(jié)束該線程。

看下面的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyHandler implements Thread.UncaughtExceptionHandler{
  @Override
  public void uncaughtException(Thread t, Throwable e) {
    System.out.println("出現(xiàn)了異常");
    e.printStackTrace();
  }
}
public class Test{
  public static void main(String[] args) {
    Thread.currentThread().setUncaughtExceptionHandler(new MyHandler());
    int a=1/0;
  }
}

在主線程中設(shè)置了異常處理器,最后捕獲了異常。

以上所述是小編給大家介紹的Java多線程的其他知識_動力節(jié)點Java學(xué)院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 极品xxxx欧美一区二区 | 亚洲欧洲日产v特级毛片 | 国产毛毛片一区二区三区四区 | 91超在线| 午夜视频免费播放 | 国产精品久久久久久久久久电影 | 日韩中文字幕一区二区三区 | 又黄又爽免费无遮挡在线观看 | 国产噜噜噜噜噜久久久久久久久 | 欧美中文字幕一区二区三区亚洲 | 国产免费视频一区二区裸体 | 国产精品视频一区二区三区四 | 国产精品99久久久久久久女警 | 91久久国产露脸精品国产 | 国产1区2区3区中文字幕 | 免费午夜网站 | 中文字幕免费看 | 久久99久久98精品免观看软件 | 看免费的毛片 | 国产成人精品一区二区三区电影 | xxxx69hd一hd72| 国产美女视频一区二区三区 | aa久久 | 久久不雅视频 | 久久96国产精品久久秘臀 | 羞羞视频免费视频欧美 | 国产亚洲精品久久 | 韩国精品视频在线观看 | 91极品视频在线观看 | 亚洲成人欧美在线 | 亚洲va久久久噜噜噜久久男同 | 一级免费 | 在线播放黄色片 | 99这里精品 | 3级毛片| 免费观看9x视频网站在线观看 | 中文字幕在线网站 | 久久精品av | 亚洲一区二区不卡视频 | 青草视频在线观看视频 | 九九精品在线 |