程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中線程死亡的幾種狀況實例剖析

Java中線程死亡的幾種狀況實例剖析

編輯:關於JAVA

Java中線程死亡的幾種狀況實例剖析。本站提示廣大學習愛好者:(Java中線程死亡的幾種狀況實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中線程死亡的幾種狀況實例剖析正文


Java線程會議如下三種方式完畢,完畢後就處於死亡形態

1、run()或許call()辦法執行完成,線程正常完畢;

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

3、直接調用該線程的stop()辦法來完畢該線程;

留意:當主線程完畢時,其他線程不受任何影響,並不會隨之完畢。一旦子線程啟動起來後,它就擁有和主線程相反的位置,不會遭到主線程完畢的影響。

為了測試某個線程能否曾經死亡,可以調用線程對象的isAlive()辦法,當線程處於就緒、運轉、阻塞三種形態時,該辦法將前往true;當線程處於新建、死亡兩種形態時,該辦法就前往false。

如下對線程死亡狀況的1和2停止測試。

主線程的代碼如下:

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

編寫線程正常完畢的線程執行代碼:

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了。

主線程:子線程形態為true
主線程:子線程形態為true
子線程:我還活著8
主線程:子線程形態為true
主線程:子線程形態為true
主線程:子線程形態為true
子線程:我還活著9
主線程:子線程形態為true
主線程:子線程形態為true
主線程:子線程形態為true
子線程:我還活著10
主線程:子線程形態為true
主線程:子線程形態為true
主線程:子線程形態為true
主線程:子線程形態為false
主線程:子線程形態為false
主線程:子線程形態為false
主線程:子線程形態為false
主線程:子線程形態為false

測試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");
   }
  }
 }
}

再次執行,察看輸入:

主線程:子線程形態為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。好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或許任務能帶來一定的協助,假如有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved