亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

注意:當(dāng)主線程結(jié)束時(shí),其他線程不受任何影響,并不會(huì)隨之結(jié)束。一旦子線程啟動(dòng)起來后,它就擁有和主線程相同的地位,不會(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)為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。好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Spring中的@EnableConfigurationProperties使用方式以及作用詳解

    Spring中的@EnableConfigurationProperties使用方式以及作用詳解

    這篇文章主要介紹了Spring中的@EnableConfigurationProperties使用方式以及作用詳解,使用了?@ConfigurationProperties?注解的配置類生效,將該類注入到?IOC?容器中,交由?IOC?容器進(jìn)行管理,此時(shí)則不用再配置類上加上@Component,需要的朋友可以參考下
    2024-01-01
  • JAVA得到數(shù)組中最大值和最小值的簡(jiǎn)單實(shí)例

    JAVA得到數(shù)組中最大值和最小值的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了JAVA得到數(shù)組中最大值和最小值的簡(jiǎn)單實(shí)例,需要的朋友可以參考下
    2014-08-08
  • JPA findById方法和getOne方法的區(qū)別說明

    JPA findById方法和getOne方法的區(qū)別說明

    這篇文章主要介紹了JPA findById方法和getOne方法的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2021-08-08
  • Java中的HashMap弱引用之WeakHashMap詳解

    Java中的HashMap弱引用之WeakHashMap詳解

    這篇文章主要介紹了Java中的HashMap弱引用之WeakHashMap詳解,當(dāng)內(nèi)存空間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯(cuò)誤,使程序異常終止,也不會(huì)靠隨意回收具有強(qiáng)引用的對(duì)象來解決內(nèi)存不足的問題,需要的朋友可以參考下
    2023-09-09
  • 詳解maven安裝教程以及解決安裝不成功的解決辦法

    詳解maven安裝教程以及解決安裝不成功的解決辦法

    這篇文章主要介紹了詳解maven安裝教程以及解決安裝不成功的解決辦法,詳細(xì)的介紹了幾種解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-12-12
  • MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語句問題

    MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語句問題

    這篇文章主要介紹了MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語句問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 關(guān)于kafka發(fā)送消息的三種方式總結(jié)

    關(guān)于kafka發(fā)送消息的三種方式總結(jié)

    這篇文章主要介紹了關(guān)于kafka發(fā)送消息的三種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • JAVA自定義注解實(shí)現(xiàn)接口/ip限流的示例代碼

    JAVA自定義注解實(shí)現(xiàn)接口/ip限流的示例代碼

    本文主要介紹了JAVA自定義注解實(shí)現(xiàn)接口/ip限流的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java語言資源國際化步驟解析

    Java語言資源國際化步驟解析

    這篇文章主要介紹了Java語言資源國際化步驟解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • mybatis foreach 循環(huán) list(map)實(shí)例

    mybatis foreach 循環(huán) list(map)實(shí)例

    這篇文章主要介紹了mybatis foreach 循環(huán) list(map)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論