Java多線程(五)列赎、多線程其他知識簡要介紹

一、線程組

[java]view plaincopy

/**

*?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.

*?

*?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),如下:

查看Thread的API殉挽,可以看到丰涉,創(chuàng)建一個線程可以指定它的線程組和不指定線程組。如果指定其所屬的線程組斯碌,那么該線程組是創(chuàng)建它的線程所屬線程組的子線程組一死。如果不指定線程組,則屬于默認情況傻唾,該線程和創(chuàng)建它的線程在同一個線程組投慈。

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

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

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

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

下面是ThreadGroup的方法摘要

方法摘要

intactiveCount()

返回此線程組中活動線程的估計數(shù)锁右。

intactiveGroupCount()

返回此線程組中活動線程組的估計數(shù)。

booleanallowThreadSuspension(boolean?b)

已過時讶泰。此調(diào)用的定義取決于suspend()咏瑟,它被廢棄了。更進一步地說痪署,此調(diào)用的行為從不被指定响蕴。

voidcheckAccess()

確定當前運行的線程是否有權(quán)修改此線程組。

voiddestroy()

銷毀此線程組及其所有子組惠桃。

intenumerate(Thread[]?list)

把此線程組及其子組中的所有活動線程復制到指定數(shù)組中浦夷。

intenumerate(Thread[]?list, boolean?recurse)

把此線程組中的所有活動線程復制到指定數(shù)組中辖试。

intenumerate(ThreadGroup[]?list)

把對此線程組中的所有活動子組的引用復制到指定數(shù)組中。

intenumerate(ThreadGroup[]?list, boolean?recurse)

把對此線程組中的所有活動子組的引用復制到指定數(shù)組中劈狐。

intgetMaxPriority()

返回此線程組的最高優(yōu)先級罐孝。

StringgetName()

返回此線程組的名稱。

ThreadGroupgetParent()

返回此線程組的父線程組肥缔。

voidinterrupt()

中斷此線程組中的所有線程莲兢。

booleanisDaemon()

測試此線程組是否為一個后臺程序線程組。

booleanisDestroyed()

測試此線程組是否已經(jīng)被銷毀续膳。

voidlist()

將有關(guān)此線程組的信息打印到標準輸出改艇。

booleanparentOf(ThreadGroupg)

測試此線程組是否為線程組參數(shù)或其祖先線程組之一。

voidresume()

已過時坟岔。此方法只用于聯(lián)合Thread.suspend和ThreadGroup.suspend時谒兄,因為它們所固有的容易導致死鎖的特性,所以兩者都已廢棄社付。有關(guān)詳細信息承疲,請參閱Thread.suspend()

voidsetDaemon(boolean?daemon)

更改此線程組的后臺程序狀態(tài)鸥咖。

voidsetMaxPriority(int?pri)

設(shè)置線程組的最高優(yōu)先級燕鸽。

voidstop()

已過時。此方法具有固有的不安全性啼辣。有關(guān)詳細信息啊研,請參閱Thread.stop()

voidsuspend()

已過時鸥拧。此方法容易導致死鎖党远。有關(guān)詳細信息,請參閱Thread.suspend()住涉。

StringtoString()

返回此線程組的字符串表示形式麸锉。

voiduncaughtException(Threadt,Throwablee)

當此線程組中的線程因為一個未捕獲的異常而停止钠绍,并且線程沒有安裝特定Thread.UncaughtExceptionHandler時舆声,由 Java Virtual Machine 調(diào)用此方法。

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

從JDK1.5開始媳握,Java加強了線程的異常處理,如果線程執(zhí)行過程中拋出了一個未處理的異常磷脯,JVM在結(jié)束該線程之前會自動查找是否有對應的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è)置異常處理器:

public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

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

public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)

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

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

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

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

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

看下面的例子:

[java]view plaincopy

classMyHandlerimplementsThread.UncaughtExceptionHandler{

@Override

publicvoiduncaughtException(Thread?t,?Throwable?e)?{

System.out.println("出現(xiàn)了異常");

e.printStackTrace();

}

}

publicclassTest{

publicstaticvoidmain(String[]?args)?{

Thread.currentThread().setUncaughtExceptionHandler(newMyHandler());

inta=1/0;

}

}

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

三、Callable和Future

參考:http://lavasoft.blog.51cto.com/62575/222082

四局义、volatile關(guān)鍵字

參考:http://lavasoft.blog.51cto.com/62575/222076

五喜爷、顯示同步鎖

參考:http://lavasoft.blog.51cto.com/62575/222084

轉(zhuǎn)自:http://blog.csdn.net/lonelyroamer/article/details/7993502

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萄唇,隨后出現(xiàn)的幾起案子檩帐,更是在濱河造成了極大的恐慌,老刑警劉巖另萤,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湃密,死亡現(xiàn)場離奇詭異,居然都是意外死亡四敞,警方通過查閱死者的電腦和手機泛源,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忿危,“玉大人达箍,你說我怎么就攤上這事∑坛” “怎么了缎玫?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵硬纤,是天一觀的道長。 經(jīng)常有香客問我赃磨,道長咬摇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任煞躬,我火速辦了婚禮肛鹏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恩沛。我一直安慰自己在扰,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布雷客。 她就那樣靜靜地躺著芒珠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搅裙。 梳的紋絲不亂的頭發(fā)上皱卓,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音部逮,去河邊找鬼娜汁。 笑死,一個胖子當著我的面吹牛兄朋,可吹牛的內(nèi)容都是我干的掐禁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼颅和,長吁一口氣:“原來是場噩夢啊……” “哼傅事!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峡扩,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蹭越,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后教届,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體响鹃,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年巍佑,在試婚紗的時候發(fā)現(xiàn)自己被綠了茴迁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寄悯。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡萤衰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猜旬,到底是詐尸還是另有隱情脆栋,我是刑警寧澤倦卖,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站椿争,受9級特大地震影響怕膛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秦踪,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一褐捻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椅邓,春花似錦柠逞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至合住,卻和暖如春绰精,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背透葛。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工笨使, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僚害。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓阱表,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贡珊。 傳聞我的和親對象是個殘疾皇子最爬,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 導讀目錄 線程組(ThreadGroup) 線程池(Thread Pool) Fork/Join框架和Execut...
    ql2012jz閱讀 1,456評論 0 0
  • 一、認識多任務门岔、多進程爱致、單線程、多線程 要認識多線程就要從操作系統(tǒng)的原理說起寒随。 以前古老的DOS操作系統(tǒng)(V 6....
    GT921閱讀 1,013評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理糠悯,服務發(fā)現(xiàn),斷路器妻往,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的互艾,后來想想還是整...
    coder_pig閱讀 1,646評論 2 17
  • 當身邊的人紛紛先孕后戀,先孕后婚讯泣,閃孕閃婚纫普,我這種領(lǐng)證一年多還未懷孕,真是奇葩了好渠。尤其是五一辦完婚禮后昨稼,懷孕的議程...
    芝芝風子閱讀 348評論 0 0