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

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

 更新時間:2017年01月10日 10:25:07   作者:Crazyant  
線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。下面這篇文章主要給大家介紹了Java線程死亡的幾種情況,需要的朋友可以參考下。

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

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

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

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

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

為了測試某個線程是否已經(jīng)死亡,可以調(diào)用線程對象的isAlive()方法,當(dāng)線程處于就緒、運行、阻塞三種狀態(tài)時,該方法將返回true;當(dāng)線程處于新建、死亡兩種狀態(tài)時,該方法就返回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ài)為" + t.isAlive());
  }
 }
}

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

兩個線程的輸出結(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

測試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)為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)
主線程:子線程狀態(tài)為false
主線程:子線程狀態(tài)為false
主線程:子線程狀態(tài)為false

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

總結(jié)

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

相關(guān)文章

  • java如何生成登錄隨機驗證碼

    java如何生成登錄隨機驗證碼

    這篇文章主要為大家詳細介紹了java如何生成登錄隨機驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制

    MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制

    MyBatis 是一個流行的持久層框架,它通過使用XML或注解的方式將SQL語句、存儲過程和Java方法進行綁定,從而避免了手寫大量的JDBC代碼和手動設(shè)置參數(shù)與結(jié)果集,本文給大家介紹了MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制,需要的朋友可以參考下
    2024-05-05
  • Java中的BigDecimal精度運算詳解

    Java中的BigDecimal精度運算詳解

    這篇文章主要介紹了Java中的BigDecimal精度運算詳解,Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進行精確的運算,雙精度浮點型變量double可以處理16位有效數(shù),但在實際應(yīng)用中,可能需要對更大或者更小的數(shù)進行運算和處理,需要的朋友可以參考下
    2023-10-10
  • 使用@CachePut?更新數(shù)據(jù)庫和更新緩存

    使用@CachePut?更新數(shù)據(jù)庫和更新緩存

    這篇文章主要介紹了使用@CachePut?更新數(shù)據(jù)庫和更新緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 實現(xiàn)微信和支付寶支付功能

    Java 實現(xiàn)微信和支付寶支付功能

    這篇文章主要介紹了Java 實現(xiàn)微信和支付寶支付功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Springboot項目基于Devtools實現(xiàn)熱部署步驟詳解

    Springboot項目基于Devtools實現(xiàn)熱部署步驟詳解

    這篇文章主要介紹了Springboot項目基于Devtools實現(xiàn)熱部署,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • RabbitMQ延遲隊列及消息延遲推送實現(xiàn)詳解

    RabbitMQ延遲隊列及消息延遲推送實現(xiàn)詳解

    這篇文章主要介紹了RabbitMQ延遲隊列及消息延遲推送實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 教你java面試時如何聊單例模式

    教你java面試時如何聊單例模式

    這篇文章主要給大家介紹了關(guān)于Java單例模式推薦的幾種模式,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • java中的Io(input與output)操作總結(jié)(二)

    java中的Io(input與output)操作總結(jié)(二)

    這一節(jié)我們來討論關(guān)于文件自身的操作包括:創(chuàng)建文件對象、創(chuàng)建和刪除文件、文件的判斷和測試、創(chuàng)建目錄、獲取文件信息、列出文件系統(tǒng)的根目錄、列出目錄下的所有文件,等等,感興趣的朋友可以了解下
    2013-01-01
  • Java?方法(方法的定義,可變參數(shù),參數(shù)的傳遞問題,方法重載,方法簽名)

    Java?方法(方法的定義,可變參數(shù),參數(shù)的傳遞問題,方法重載,方法簽名)

    這篇文章主要介紹了Java?方法(方法的定義,可變參數(shù),參數(shù)的傳遞問題,方法重載,方法簽名),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09

最新評論

罗平县| 霍林郭勒市| 临安市| 绥德县| 平凉市| 任丘市| 富平县| 潜山县| 颍上县| 轮台县| 平乡县| 子洲县| 凤阳县| 志丹县| 阳城县| 巩义市| 浦东新区| 浙江省| 府谷县| 平阳县| 凯里市| 兴海县| 禹州市| 合江县| 成都市| 宾川县| 长武县| 泾源县| 大名县| 海淀区| 久治县| 湄潭县| 大埔县| 遵义市| 临武县| 鄱阳县| 汽车| 敦化市| 通辽市| 镇雄县| 政和县|