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

Java多線程的其他知識(shí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年05月26日 15:09:03   投稿:mrr  
這篇文章主要介紹了Java多線程的其他知識(shí),需要的朋友可以參考下

一、線程組

 /** 
 * 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 
 */ 

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

一個(gè)線程可以訪問(wèn)它所在線程組的信息, 不可以訪問(wèn)它父線程組和其他線程組的信息。

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

 

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

以上面的圖舉個(gè)簡(jiǎn)單的例子:

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

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

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

下面是ThreadGroup的方法摘要

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

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

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

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

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

public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

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

public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)

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

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

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

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

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

看下面的例子:

 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多線程的其他知識(shí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java中的HashSet集合解析

    Java中的HashSet集合解析

    這篇文章主要介紹了Java中的HashSet集合解析,HashSet 實(shí)現(xiàn) Set 接口,內(nèi)部維護(hù)一個(gè) HashMap 實(shí)例,它不能保證集合迭代的順序,也不能保證順序不變,HashSet 允許 null 元素,需要的朋友可以參考下
    2023-11-11
  • springcloud?如何解決微服務(wù)之間token傳遞問(wèn)題

    springcloud?如何解決微服務(wù)之間token傳遞問(wèn)題

    這篇文章主要介紹了springcloud?如何解決微服務(wù)之間token傳遞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解SpringBoot是如何整合SpringDataRedis的?

    詳解SpringBoot是如何整合SpringDataRedis的?

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著SpringBoot是如何整合SpringDataRedis展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 解決SpringBoot啟動(dòng)過(guò)后不能訪問(wèn)jsp頁(yè)面的問(wèn)題(超詳細(xì))

    解決SpringBoot啟動(dòng)過(guò)后不能訪問(wèn)jsp頁(yè)面的問(wèn)題(超詳細(xì))

    這篇文章主要介紹了解決SpringBoot啟動(dòng)過(guò)后不能訪問(wèn)jsp頁(yè)面的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),有需要的朋友可以參考一下,希望對(duì)你有所幫助。
    2020-05-05
  • 解決SpringMVC獲取請(qǐng)求參數(shù)亂碼問(wèn)題

    解決SpringMVC獲取請(qǐng)求參數(shù)亂碼問(wèn)題

    在使用SpringMVC和thymeleaf進(jìn)行請(qǐng)求參數(shù)處理時(shí),可能會(huì)遇到亂碼問(wèn)題,對(duì)于GET方法亂碼,可通過(guò)修改Tomcat的server.xml文件,添加URIEncoding="UTF-8"解決,而POST方法亂碼,則需在web.xml配置SpringMVC提供的過(guò)濾器
    2024-11-11
  • Java運(yùn)算符解密之位運(yùn)算、移位運(yùn)算舉例詳解

    Java運(yùn)算符解密之位運(yùn)算、移位運(yùn)算舉例詳解

    這篇文章主要介紹了Java運(yùn)算符解密之位運(yùn)算、移位運(yùn)算的相關(guān)資料,Java中的位運(yùn)算符包括按位與&、按位或|、按位取反~和按位異或^,用于對(duì)數(shù)據(jù)的二進(jìn)制位進(jìn)行操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Java數(shù)組中的元素刪除并實(shí)現(xiàn)向前移的代碼

    Java數(shù)組中的元素刪除并實(shí)現(xiàn)向前移的代碼

    這篇文章主要介紹了Java數(shù)組中的元素刪除并實(shí)現(xiàn)向前移的代碼的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • java  工廠方法詳解及實(shí)例代碼

    java 工廠方法詳解及實(shí)例代碼

    這篇文章主要介紹了java 工廠方法詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java類的初始化順序的實(shí)現(xiàn)

    Java類的初始化順序的實(shí)現(xiàn)

    類的初始化過(guò)程是在類加載階段完成的,包括加載、驗(yàn)證、準(zhǔn)備、解析和初始化等步驟,本文主要介紹了Java類的初始化順序的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • 如何優(yōu)雅的替換掉Java代碼中的if else

    如何優(yōu)雅的替換掉Java代碼中的if else

    這篇文章主要介紹了如何優(yōu)雅的替換掉Java代碼中的if else,幫助大家優(yōu)化自己的Java代碼,提高可讀性與簡(jiǎn)潔性,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

苏尼特左旗| 鹤岗市| 黑龙江省| 天门市| 阿克陶县| 开原市| 九寨沟县| 香港 | 蒙阴县| 平度市| 虎林市| 迁安市| 罗山县| 石泉县| 灌阳县| 天全县| 梁河县| 琼海市| 禄劝| 五常市| 视频| 仙桃市| 太和县| 金堂县| 平泉县| 辽源市| 宜良县| 齐齐哈尔市| 个旧市| 中阳县| 牡丹江市| 尼木县| 天柱县| 通渭县| 盐亭县| 玉田县| 新宾| 衡东县| 沐川县| 临清市| 沙田区|