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

Java結束線程的三種方法及該如何選擇

 更新時間:2021年03月24日 08:44:19   作者:超人不會飛  
這篇文章主要介紹了Java結束線程的三種方法及該如何選擇,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下

java常用的結束一個運行中的線程的方法有3中:使用退出標志,使用interrupt方法,使用stop方法。

1.使用退出標志

即在線程內部定義一個bool變量來判斷是否結束當前的線程:

public class ThreadSafe extends Thread {
 public volatile boolean exit = false;
 public void run() {
  while (!exit){
   //do work
  }
 }

 public static void main(String[] args) throws Exception { 
  ThreadFlag thread = new ThreadFlag(); 
  thread.start(); 
  sleep(5000); // 主線程延遲5秒 
  thread.exit = true; // 終止線程thread 
  thread.join(); 
  System.out.println("線程退出!"); 
 }
}

這種情況一般是將線程的任務放在run方法中的一個while循環(huán)中,而由這個bool變量來對while循環(huán)進行控制。

2.使用interrupt方法

這種方法需要判斷當前的線程所處于的狀態(tài):
(1)當前線程處于阻塞狀態(tài)時
線程處于阻塞狀態(tài)一般是在使用了 sleep,同步鎖的 wait,socket 中的 receiver,accept 等方法時,會使線程處于阻塞狀態(tài)。

public class ThreadInterrupt extends Thread { 
 public void run() { 
  try { 
   sleep(50000); // 延遲50秒 
  } 
  catch (InterruptedException e) { 
   System.out.println(e.getMessage()); 
  } 
 } 
 public static void main(String[] args) throws Exception { 
  Thread thread = new ThreadInterrupt(); 
  thread.start(); 
  System.out.println("在50秒之內按任意鍵中斷線程!"); 
  System.in.read(); 
  thread.interrupt(); 
  thread.join(); 
  System.out.println("線程已經(jīng)退出!"); 
 } 
}

注意這種情況寫,使用 interrupt 方法結束線程的時候,一定要先捕獲 InterruptedException 異常之后通過 break 來跳出循環(huán),才能正常結束 run 方法。

(2)線程未處于阻塞狀態(tài)時

使用 isInterrupted() 判斷線程的中斷標志來退出循環(huán)。當使用 interrupt() 方法時,中斷標志就會置 true,和使用自定義的標志來控制循環(huán)是一樣的道理。

public class ThreadSafe extends Thread {
 public void run() {
  while (!isInterrupted()) { //非阻塞過程中通過判斷中斷標志來退出
   try {
    Thread.sleep(5*1000); //阻塞過程捕獲中斷異常來退出
   } catch (InterruptedException e) {
    e.printStackTrace();
    break; //捕獲到異常之后,執(zhí)行 break 跳出循環(huán)
   }
  }
 }
}

3.使用stop方法來結束線程

public class Main {
 public static void main(String[] args) throws InterruptedException {
  MyThread myThread = new MyThread();
  myThread.start();
  Thread.sleep(3000); // 間隔3秒后
  myThread.stop();  // 結束線程
  System.out.println("結束了");
 }
}

4.結束方法的選擇

建議使用標志位和interrupt方法來結束線程,stop方法已經(jīng)不建議再被使用了。
因為采用 stop 是不安全的,主要影響點如下:

  1. thread.stop() 調用之后,創(chuàng)建子線程的線程就會拋出 ThreadDeatherror 的錯誤;
  2. 調用 stop 會釋放子線程所持有的所有鎖。導致了該線程所持有的所有鎖的突然釋放(不可控制),那么被保護數(shù)據(jù)就有可能呈現(xiàn)不一致性。

以上就是Java結束線程的三種方法及該如何選擇的詳細內容,更多關于Java 結束線程的資料請關注腳本之家其它相關文章!

相關文章

  • Java包裝類原理與用法實例分析

    Java包裝類原理與用法實例分析

    這篇文章主要介紹了Java包裝類,結合實例形式分析了Java包裝類基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • Jmeter實現(xiàn)Base64編碼的兩種方式

    Jmeter實現(xiàn)Base64編碼的兩種方式

    這篇文章主要介紹了Jmeter實現(xiàn)Base64編碼,大家都知道Jmeter實現(xiàn)Base64編碼有兩種方式,本文通過圖文并茂的形式把每種方法給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • java多線程之Future和FutureTask使用實例

    java多線程之Future和FutureTask使用實例

    這篇文章主要介紹了java多線程之Future和FutureTask使用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    這篇文章主要介紹了SpringBoot2.動態(tài)@Value的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java如何比較兩個任意文件是否相同

    Java如何比較兩個任意文件是否相同

    這篇文章主要為大家詳細介紹了Java如何實現(xiàn)比較兩個任意文件是否相同,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • Java中對于雙屬性枚舉的使用案例

    Java中對于雙屬性枚舉的使用案例

    今天小編就為大家分享一篇關于Java中對于雙屬性枚舉的使用案例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 一文帶你搞懂Java8的LocalDateTime

    一文帶你搞懂Java8的LocalDateTime

    LocalDateTime?是Java8中新加入的日期時間類,現(xiàn)在都?Java20?了,不會還有人沒用過?LocalDateTime?吧?今天給大家演示一下?LocalDateTime?的常用方法
    2023-04-04
  • spring boot的maven配置依賴詳解

    spring boot的maven配置依賴詳解

    本篇文章主要介紹了spring boot的maven配置依賴詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 現(xiàn)代高效的java構建工具gradle的快速入門

    現(xiàn)代高效的java構建工具gradle的快速入門

    和Maven一樣,Gradle只是提供了構建項目的一個框架,真正起作用的是Plugin,本文主要介紹了gradle入門,文中通過示例代碼介紹的非常詳細,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 淺談java中的TreeMap 排序與TreeSet 排序

    淺談java中的TreeMap 排序與TreeSet 排序

    下面小編就為大家?guī)硪黄獪\談java中的TreeMap 排序與TreeSet 排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論

廊坊市| 甘德县| 开远市| 浠水县| 隆昌县| 长岭县| 汕头市| 仁怀市| 汝城县| 吉水县| 霍山县| 丹寨县| 玉龙| 襄樊市| 乌兰察布市| 弋阳县| 措勤县| 修水县| 马关县| 揭西县| 布尔津县| 高安市| 犍为县| 昭苏县| 东至县| 乐亭县| 青川县| 开江县| 滕州市| 曲沃县| 克什克腾旗| 龙江县| 馆陶县| 信丰县| 靖远县| 灵台县| 婺源县| 贵定县| 武冈市| 临城县| 东乡县|