国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java中線程死亡的幾種情況實(shí)例分析

2019-11-26 13:17:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Java線程會(huì)議如下三種方式結(jié)束,結(jié)束后就處于死亡狀態(tài)

1、run()或者call()方法執(zhí)行完成,線程正常結(jié)束;

2、線程拋出一個(gè)未捕獲的Exception或Error;

3、直接調(diào)用該線程的stop()方法來(lái)結(jié)束該線程;

注意:當(dāng)主線程結(jié)束時(shí),其他線程不受任何影響,并不會(huì)隨之結(jié)束。一旦子線程啟動(dòng)起來(lái)后,它就擁有和主線程相同的地位,不會(huì)受到主線程結(jié)束的影響。

為了測(cè)試某個(gè)線程是否已經(jīng)死亡,可以調(diào)用線程對(duì)象的isAlive()方法,當(dāng)線程處于就緒、運(yùn)行、阻塞三種狀態(tài)時(shí),該方法將返回true;當(dāng)線程處于新建、死亡兩種狀態(tài)時(shí),該方法就返回false。

如下對(duì)線程死亡情況的1和2進(jìn)行測(cè)試。

主線程的代碼如下:

public class ThreadTest { public static void main(String[] args) throws InterruptedException {  Thread t = new Thread(new RunTask());  t.start();    while (true) {   Thread.sleep(1000);   System.out.println("主線程:子線程狀態(tài)為" + t.isAlive());  } }}

測(cè)試1:線程正常結(jié)束后,isAlive()返回False

編寫線程正常結(jié)束的線程執(zhí)行代碼:

public class RunTask implements Runnable {  @Override public void run() {  for (int idx = 1; idx <= 10; idx++) {   System.out.println("子線程:我還活著" + idx);      try {    Thread.sleep(3000);   } catch (InterruptedException e) {    e.printStackTrace();   }  } }}

兩個(gè)線程的輸出結(jié)果如下所示,顯示子線程正常執(zhí)行結(jié)束后,使用Thread.isAlive()就返回False了。

主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true子線程:我還活著8主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true子線程:我還活著9主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true子線程:我還活著10主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false

測(cè)試2:子線程拋出異常之后,線程的isAlive()返回False

修改子線程的代碼,加入異常拋出:

public class RunTask implements Runnable {  @Override public void run() {  for (int idx = 1; idx <= 10; idx++) {   System.out.println("子線程:我還活著" + idx);      try {    Thread.sleep(3000);   } catch (InterruptedException e) {    e.printStackTrace();   }      if (idx == 5) {    throw new RuntimeException("i am die");   }  } }}

再次執(zhí)行,觀察輸出:

主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true子線程:我還活著4主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true子線程:我還活著5主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為true主線程:子線程狀態(tài)為trueException in thread "Thread-0" java.lang.RuntimeException: i am die at RunTask.run(RunTask.java:15) at java.lang.Thread.run(Thread.java:662)主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false主線程:子線程狀態(tài)為false

可以看到,拋出異常后,子線程直接終止,變成了Flase狀態(tài);

總結(jié)

線程正常結(jié)束后或者線程拋出了未捕獲的異常,線程變成死亡狀態(tài),使用isAlive()函數(shù)返回False。好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝州市| 搜索| 西安市| 焦作市| 万州区| 隆尧县| 临夏县| 虎林市| 游戏| 含山县| 庆元县| 于都县| 海口市| 扶余县| 六安市| 凌海市| 泾川县| 景宁| 芜湖县| 拜泉县| 自治县| 金溪县| 富川| 江油市| 贺兰县| 古浪县| 长顺县| 双峰县| 拉萨市| 响水县| 电白县| 新民市| 房山区| 平果县| 新化县| 辛集市| 肇州县| 芦山县| 临高县| 甘德县| 三江|