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

Java終止線程的兩種方法

 更新時(shí)間:2023年07月25日 15:41:11   作者:小林想被監(jiān)督學(xué)習(xí)  
本文主要介紹了Java終止線程的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

終止的基本思路

正常情況下不會(huì)出現(xiàn)run還沒(méi)有執(zhí)行完,線程突然就沒(méi)了的情況,所以我們想要終止線程就要讓run盡快執(zhí)行完畢,以下代碼都是通過(guò)讓run盡快執(zhí)行完畢這個(gè)思路來(lái)終止線程的

一.程序員手動(dòng)設(shè)置標(biāo)志位

package 停止多線程的方式;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-24
 * Time: 23:06
 */
//1.程序員手動(dòng)設(shè)置標(biāo)志位,通過(guò)手動(dòng)設(shè)置的標(biāo)志位來(lái)讓run盡快結(jié)束
public class Demo1 {
    private static boolean isQuit=false;
    public static void main(String[] args) {
        //boolean isQuit=false;
        Thread thread=new Thread(()->{
            while (!isQuit){
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        thread.start();
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("標(biāo)注位修改,進(jìn)程退出");
        isQuit=true;
    }
}

在該方法中需要注意標(biāo)志位的初始化位置,可以看lambda表達(dá)式中調(diào)用局部變量發(fā)生錯(cuò)誤這篇博客描述了更多細(xì)節(jié)

二.使用Thread自帶的標(biāo)志位

package 停止多線程的方式;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-25
 * Time: 12:17
 */
//使用Thread自帶的標(biāo)志位
public class Demo2 {
    public static void main(String[] args) {
        Thread thread=new Thread(()->{
            //調(diào)用currentThread()靜態(tài)方法可以獲得當(dāng)前線程的對(duì)象,也就是定義好了的thread
            // 再用這個(gè)對(duì)象去調(diào)用isInterrupted()方法獲得Thread自帶的標(biāo)志位
            while (!Thread.currentThread().isInterrupted()){    //Thread.currentThread().isInterrupted()可以用Thread.interrupted()代替
                                                                // 但是不建議,因?yàn)閕nterrupted()方法會(huì)在判定標(biāo)志位的同時(shí)清除標(biāo)志位
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //throw new RuntimeException(e);
                    break;
                }
            }
        });
        thread.start();
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        thread.interrupt(); //調(diào)用interrupt()方法時(shí)要是線程正在sleep當(dāng)中就會(huì)強(qiáng)制使sleep拋出一個(gè)異常,立即喚醒,但是sleep喚醒了以后
                            //會(huì)自動(dòng)清除前面設(shè)置的標(biāo)志位,給程序員留下更多的操作空間(接下來(lái)的操作在catch中寫,比如要終止線程,就在catch中寫break)
    }
}

1.要通過(guò)Thread.currentThread().isInterrupted()來(lái)獲取Thread自帶的標(biāo)志位,調(diào)用currentThread()靜態(tài)方法可以獲得當(dāng)前線程的對(duì)象,也就是定義好了的thread,再用這個(gè)對(duì)象去調(diào)用isInterrupted()方法獲得Thread自帶的標(biāo)志位,這段代碼可以用Thread.interrupted()代替但是不建議,因?yàn)閕nterrupted()方法會(huì)在判定標(biāo)志位的同時(shí)清除標(biāo)志位,所以不合理,不推薦使用。

2.當(dāng)線程中有sleep時(shí)就說(shuō)明線程在一些時(shí)刻是處于睡眠狀態(tài)的,就會(huì)有一些特殊情況,調(diào)用interrupt()方法時(shí)要是線程正在sleep當(dāng)中就會(huì)強(qiáng)制使sleep拋出一個(gè)異常,立即喚醒,但是sleep喚醒了以后會(huì)自動(dòng)清除前面設(shè)置的標(biāo)志位,給程序員留下更多的操作空間(接下來(lái)的操作在catch中寫,比如要終止線程,就在catch中寫break)

3.要是線程中沒(méi)有sleep時(shí),thread.interrupt()就正常的修改標(biāo)志位,將while循環(huán)結(jié)束,正常終止線程

到此這篇關(guān)于Java終止線程的兩種方法的文章就介紹到這了,更多相關(guān)Java終止線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中wait()與sleep()兩者的不同深入解析

    Java中wait()與sleep()兩者的不同深入解析

    在Java多線程編程中,wait()和sleep()是控制線程執(zhí)行和等待的兩個(gè)關(guān)鍵方法,但它們?cè)趹?yīng)用場(chǎng)景和實(shí)現(xiàn)上有顯著差異,這篇文章主要介紹了Java中wait()與sleep()兩者的不同,需要的朋友可以參考下
    2024-11-11
  • Java單例的寫法詳解

    Java單例的寫法詳解

    在java中,單例有很多種寫法,面試時(shí),手寫代碼環(huán)節(jié),除了寫算法題,有時(shí)候也會(huì)讓手寫單例模式,這里記錄一下單例的幾種寫法和優(yōu)缺點(diǎn)。需要的朋友可以參考下
    2021-09-09
  • springboot項(xiàng)目中讀取.env文件參數(shù)值的兩種主流實(shí)現(xiàn)方式

    springboot項(xiàng)目中讀取.env文件參數(shù)值的兩種主流實(shí)現(xiàn)方式

    在Spring Boot項(xiàng)目中,.env文件并非Spring Boot原生支持的配置格式,但可以通過(guò)第三方庫(kù)或自定義讀取邏輯來(lái)加載.env文件中的參數(shù),下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2025-12-12
  • Java兩種常用的隨機(jī)數(shù)生成方式(小白總結(jié))

    Java兩種常用的隨機(jī)數(shù)生成方式(小白總結(jié))

    這篇文章主要介紹了Java兩種常用的隨機(jī)數(shù)生成方式(小白總結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • SpringBoot利用jasypt實(shí)現(xiàn)配置文件加密的完整指南

    SpringBoot利用jasypt實(shí)現(xiàn)配置文件加密的完整指南

    在實(shí)際開(kāi)發(fā)中,若出于安全考慮不想暴露一些敏感的配置,如數(shù)據(jù)庫(kù)密碼等,就需要對(duì)配置文件進(jìn)行加密,下面我們來(lái)看看如何使用jasypt給配置文件加密吧
    2025-03-03
  • 基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    這篇文章主要介紹了基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java并行處理的實(shí)現(xiàn)

    Java并行處理的實(shí)現(xiàn)

    并行計(jì)算一般是指許多指令得以同時(shí)進(jìn)行的計(jì)算模式。本文主要介紹了Java并行處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中兩種拋出異常的方式示例詳解

    Java中兩種拋出異常的方式示例詳解

    在Java中有兩種拋出異常的方式,一種是throw,直接拋出異常,另一種是throws,間接拋出異常,本文給大家詳細(xì)說(shuō)明java中兩種拋出異常的方式,感興趣的朋友一起看看吧
    2023-08-08
  • springboot 整合 langchain4j 實(shí)現(xiàn)簡(jiǎn)單的問(wèn)答功能

    springboot 整合 langchain4j 實(shí)現(xiàn)簡(jiǎn)單的問(wèn)答功能

    最近在學(xué)習(xí)langchain4j,本文將介紹如何使用langchain4j快速實(shí)現(xiàn)一個(gè)簡(jiǎn)單的問(wèn)答功能,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2025-04-04

最新評(píng)論

化州市| 陈巴尔虎旗| 仁寿县| 建昌县| 五河县| 鄂伦春自治旗| 宜宾市| 乐至县| 澄迈县| 慈利县| 乐山市| 上栗县| 河曲县| 丹凤县| 萨迦县| 江北区| 乐都县| 隆尧县| 温泉县| 千阳县| 胶州市| 萨迦县| 湖州市| 富顺县| 武乡县| 灵台县| 嘉祥县| 镇坪县| 公主岭市| 房山区| 台南市| 利川市| 琼中| 乐安县| 河西区| 万载县| 永兴县| 循化| 图木舒克市| 清水县| 吉安市|