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

java 兩階段終止線程的正確做法

 更新時間:2021年12月12日 11:49:44   作者:bkpp976  
這篇文章主要給大家分享了java 兩階段終止線程的正確做法,文章列舉出錯誤的做法與正確做法做對比,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助

一、怎么優(yōu)雅地關閉一個線程?

在一個線程T1中如何優(yōu)雅地關閉線程T2(也就是說要給T2一個機會釋放持有的資源)?

1.錯誤做法

使用stop()方法停止線程:

stop()方法會真正殺死線程,如果此時該線程持有鎖,那么其他線程將永遠無法獲取鎖。

使用System.exit()方法停止線程:

會讓整個進程都退出

2.正確做法

思路:

代碼實現(xiàn):

public class Test {
    public static void main(String[] args) throws InterruptedException {
        TwoPhaseTermination twoPhaseTermination = new TwoPhaseTermination();
        twoPhaseTermination.start();

        Thread.sleep(3000);
        twoPhaseTermination.stop();

    }
}

class TwoPhaseTermination{
    // 監(jiān)控線程
    private Thread monitorThread;

    public void start(){
        monitorThread = new Thread(()->{
            Thread current = Thread.currentThread();
            while(true){
                if(current.isInterrupted()){

                    System.out.println("線程要關閉了...");
                    break;
                }
                try {
                    Thread.sleep(1000); // 階段1
                    System.out.println("監(jiān)控線程正在工作...."); // 階段2
                     // 如果在階段2被打斷,線程的isInterrupted標志位為true,會捕抓到信號并關閉線程
                     // 如果在階段1被打斷,會進入catch語句塊,并且isInterrupted標志位清空,無法關閉線程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    // 需要重新設置isInterrupted標志位為true
                    monitorThread.interrupt();
                }
            }

        });
        // 啟動線程
        monitorThread.start();
    }

    public void stop(){
        // 設置isInterrupted標志位true
        monitorThread.interrupt();
    }
}

運行結果:

兩階段關閉線程:

二、要點

為什么需要在catch代碼塊中重新執(zhí)行monitorThread.interrupt()?因為Thread.sleep()執(zhí)行過程中被打斷,isInterrupted標志位會清空,下一次進入while循環(huán)就會忽略這次打斷,繼續(xù)運行線程。

演示一下把monitorThread.interrupt()注釋掉的結果:

可以看到,會忽略這次的isInterrupted信號,繼續(xù)運行線程。

到此這篇關于java 兩階段終止線程的正確做法的文章就介紹到這了,更多相關java 兩階段終止線程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解讀nacos獲取配置文件的大致過程

    解讀nacos獲取配置文件的大致過程

    這篇文章主要介紹了nacos獲取配置文件的大致過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • log4j的配置文件詳細解析

    log4j的配置文件詳細解析

    以下小編主要為大家介紹一下log4j的配置文件各個配置項的含義。需要的朋友可以過來參考下
    2013-08-08
  • Java實現(xiàn)對比兩個實體類字段變化的示例詳解

    Java實現(xiàn)對比兩個實體類字段變化的示例詳解

    我們在工作中,可能會在日志中記錄數(shù)據的變化情況或者在公共處理的數(shù)據增加一個日志頁面,我們可以根據CompareUtils工具類比較數(shù)據前后發(fā)生了怎樣的變化,下面我們就來看看具體實現(xiàn)吧
    2024-03-03
  • Java使用Optional實現(xiàn)優(yōu)雅避免空指針異常

    Java使用Optional實現(xiàn)優(yōu)雅避免空指針異常

    空指針異常(NullPointerException)可以說是Java程序員最容易遇到的問題了。為了解決這個問題,Java?8?版本中推出了?Optional?類,本文就來講講如何使用Optional實現(xiàn)優(yōu)雅避免空指針異常吧
    2023-03-03
  • Object類wait及notify方法原理實例解析

    Object類wait及notify方法原理實例解析

    這篇文章主要介紹了Object類wait及notify方法原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 詳解Log4j 日志文件存放位置設置

    詳解Log4j 日志文件存放位置設置

    這篇文章主要介紹了詳解Log4j 日志文件存放位置設置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 深入理解HashMap各個方法的源碼

    深入理解HashMap各個方法的源碼

    這篇文章主要介紹了深入理解HashMap各個方法的源碼,HashMap初始容量不能為負數(shù),若初始容量大于最大容量,則讓它等于最大容量,負載因子必須大于0,并且傳入的initialCapacity不是HashMap的容量大小,需要的朋友可以參考下
    2023-12-12
  • SpringSecurity OAtu2+JWT實現(xiàn)微服務版本的單點登錄的示例

    SpringSecurity OAtu2+JWT實現(xiàn)微服務版本的單點登錄的示例

    本文主要介紹了SpringSecurity OAtu2+JWT實現(xiàn)微服務版本的單點登錄的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Spring多個數(shù)據源配置詳解

    Spring多個數(shù)據源配置詳解

    在實際場景中,會有需要配置多個數(shù)據源的場景,本文就介紹一下如何配置Spring多數(shù)據源,具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • springboot log多環(huán)境配置方式

    springboot log多環(huán)境配置方式

    這篇文章主要介紹了springboot log多環(huán)境配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

惠州市| 岳池县| 华安县| 囊谦县| 高尔夫| 西藏| 临泽县| 新昌县| 外汇| 阿尔山市| 旌德县| 清水县| 香港 | 南汇区| 万全县| 嘉祥县| 大悟县| 柘荣县| 富裕县| 固镇县| 文安县| 肇庆市| 牡丹江市| 珠海市| 木兰县| 灵璧县| 南通市| 康定县| 绥棱县| 岳池县| 南乐县| 濮阳县| 秦安县| 彰武县| 阳西县| 余江县| 九台市| 泾源县| 合作市| 泰宁县| 宣威市|