一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Java中線程死亡的幾種情況實例分析

Java中線程死亡的幾種情況實例分析

2020-07-24 13:55Crazyant JAVA教程

線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。下面這篇文章主要給大家介紹了J

Java線程會議如下三種方式結束,結束后就處于死亡狀態

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

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

3、直接調用該線程的stop()方法來結束該線程;

注意:當主線程結束時,其他線程不受任何影響,并不會隨之結束。一旦子線程啟動起來后,它就擁有和主線程相同的地位,不會受到主線程結束的影響。

為了測試某個線程是否已經死亡,可以調用線程對象的isAlive()方法,當線程處于就緒、運行、阻塞三種狀態時,該方法將返回true;當線程處于新建、死亡兩種狀態時,該方法就返回false。

如下對線程死亡情況的1和2進行測試。

主線程的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
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.isAlive());
  }
 }
}

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

編寫線程正常結束的線程執行代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();
   }
  }
 }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
主線程:子線程狀態為true
主線程:子線程狀態為true
子線程:我還活著8
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
子線程:我還活著9
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
子線程:我還活著10
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為false
主線程:子線程狀態為false
主線程:子線程狀態為false
主線程:子線程狀態為false
主線程:子線程狀態為false

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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");
   }
  }
 }
}

再次執行,觀察輸出:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
子線程:我還活著4
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
子線程:我還活著5
主線程:子線程狀態為true
主線程:子線程狀態為true
主線程:子線程狀態為true
Exception in thread "Thread-0" java.lang.RuntimeException: i am die
 at RunTask.run(RunTask.java:15)
 at java.lang.Thread.run(Thread.java:662)
主線程:子線程狀態為false
主線程:子線程狀態為false
主線程:子線程狀態為false

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

總結

線程正常結束后或者線程拋出了未捕獲的異常,線程變成死亡狀態,使用isAlive()函數返回False。好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

原文鏈接:http://www.crazyant.net/1861.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内老司机精品视频在线播出 | 欧美久久影院 | 国产高清在线精品一区 | 国产精品嫩草影院一二三区 | 欧美xbxbxbbxxbb精品 | mmkk在线看片| 香蕉在线播放 | 亚洲欧美一区二区三区不卡 | 成人天堂入口网站 | japaneseles女同专区 | 亚洲国产区中文在线观看 | 波多野结衣在线观看中文字幕 | 欧美大美bbb和大白屁股 | 日本免费观看95视频网站 | 久久国产精品高清一区二区三区 | 日本www视频在线观看 | 91中文字幕yellow字幕网 | 国产成人免费 | 91制片厂 果冻传媒 天美传媒 | 虎四免费入口 | 深夜网站在线观看 | 日韩免费视频一区 | 2020国产精品永久在线观看 | 日本在线观看免费观看完整版 | 无颜之月全集免费观看 | 视频免费 | 国产福利不卡 | 全肉np巨肉一女np高h双龙 | 国产图片综合区 | 草草视频在线观看最新 | 亚洲欧美日韩精品 | gay中国| 女班长的放荡日记高h | 免费观看韩剧网站在线观看 | 久久九九亚洲精品 | 国产成人免费观看在线视频 | 91制片厂果冻星空传媒3xg | 日噜噜 | 2019中文字幕在线视频 | 国产成+人+综合+欧美 亚洲 | 亚洲青草|