国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java|多線程與高并發(fā)】線程的中斷的兩種方法

這篇具有很好參考價值的文章主要介紹了【Java|多線程與高并發(fā)】線程的中斷的兩種方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.前言

線程中斷是指在一個線程執(zhí)行的過程中,強制終止該線程的執(zhí)行。雖說是中斷,但本質(zhì)上是讓run方法快點執(zhí)行完,而不是run方法執(zhí)行到一半,強制結(jié)束.
本文主要介紹線程中斷的兩種方法
【Java|多線程與高并發(fā)】線程的中斷的兩種方法

2. 方法1: 自定義標志位

看下面這段代碼:

public class Demo6 {
    private static boolean flag = false;
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while(!flag){
                System.out.println("線程執(zhí)行中!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("線程執(zhí)行完了!");
        });
        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("設(shè)置標志位,讓線程執(zhí)行結(jié)束");
        flag = true;
    }
}

運行結(jié)果:
【Java|多線程與高并發(fā)】線程的中斷的兩種方法
看下面這張圖:
【Java|多線程與高并發(fā)】線程的中斷的兩種方法
在這段代碼中,定義了一個flag的標志位,在線程t中以標志位作為run方法的執(zhí)行條件,每隔1s輸出一次"線程執(zhí)行中",再先讓main線程(主線程)休眠3s,3s后main線程開始執(zhí)行,輸出"設(shè)置標志位,讓線程執(zhí)行結(jié)束",并修改flag變量的值為false,線程t不滿足執(zhí)行條件,因此線程t執(zhí)行完畢.

3. 方法2:使用標準庫自帶的標志位

Java提供了一種中斷線程的機制,即調(diào)用線程的interrupt()方法。
當一個線程被中斷時,它會收到一個中斷信號,但并不意味著線程會立即停止執(zhí)行。線程可以通過檢查自己的中斷狀態(tài)來決定是否停止執(zhí)行。線程可以通過調(diào)用isInterrupted()方法來檢查自己是否被中斷。如果線程已經(jīng)被中斷,那么該方法返回true,否則返回false。

示例:

public class Demo7 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while(!Thread.currentThread().isInterrupted()){
                System.out.println("線程執(zhí)行中!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("線程執(zhí)行完了!");
        });
        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("設(shè)置標志位,讓線程執(zhí)行結(jié)束");
        t.interrupt();
    }
}

【Java|多線程與高并發(fā)】線程的中斷的兩種方法
但是這么寫,會有問題
【Java|多線程與高并發(fā)】線程的中斷的兩種方法
能看到,這里拋出了一個異常.而且雖然設(shè)置標志位,但是線程并沒有結(jié)束.
注意interrupt方法有兩種行為:

  1. 如果線程是正常狀態(tài),會設(shè)置標志位為true
  2. 如果線程是阻塞狀態(tài)(sleep),不會設(shè)置標志位,而是會觸發(fā)一個InterruptedException這樣的異常,這個異常會將sleep提前喚醒.由于我這里的catch中只是打印了日志,并沒有結(jié)束循環(huán),因此線程仍在執(zhí)行中

如果想要結(jié)束循環(huán),可以在catch中加上break
【Java|多線程與高并發(fā)】線程的中斷的兩種方法

4.總結(jié)

線程中斷機制是一種優(yōu)雅的線程停止方式,可以避免線程無限期地等待某個條件而導(dǎo)致程序出現(xiàn)死鎖或無響應(yīng)的情況。但是,線程中斷并不是強制終止線程的方法,它需要線程自己來判斷是否停止執(zhí)行。因此,在編寫線程時,需要注意在適當?shù)臅r候檢查線程的中斷狀態(tài)并做出相應(yīng)的處理。
【Java|多線程與高并發(fā)】線程的中斷的兩種方法

感謝你的觀看!希望這篇文章能幫到你!
專欄: 《從零開始的Java學(xué)習(xí)之旅》在不斷更新中,歡迎訂閱!
“愿與君共勉,攜手共進!”
【Java|多線程與高并發(fā)】線程的中斷的兩種方法文章來源地址http://www.zghlxwxcb.cn/news/detail-474637.html

到了這里,關(guān)于【Java|多線程與高并發(fā)】線程的中斷的兩種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Java|多線程與高并發(fā)】線程安全問題以及synchronized使用實例

    【Java|多線程與高并發(fā)】線程安全問題以及synchronized使用實例

    Java多線程環(huán)境下,多個線程同時訪問共享資源時可能出現(xiàn)的數(shù)據(jù)競爭和不一致的情況。 線程安全一直都是一個令人頭疼的問題.為了解決這個問題,Java為我們提供了很多方式. synchronized、ReentrantLock類等。 使用線程安全的數(shù)據(jù)結(jié)構(gòu),例如ConcurrentHashMap、ConcurrentLinkedQueue等

    2024年02月09日
    瀏覽(14)
  • 【Java|多線程與高并發(fā)】定時器(Timer)詳解

    【Java|多線程與高并發(fā)】定時器(Timer)詳解

    在Java中,定時器 Timer 類是用于執(zhí)行定時任務(wù)的工具類。它允許你安排一個任務(wù)在未來的某個時間點執(zhí)行,或者以固定的時間間隔重復(fù)執(zhí)行。 在服務(wù)器開發(fā)中,客戶端向服務(wù)器發(fā)送請求,然后等待服務(wù)器響應(yīng). 但服務(wù)器什么時候返回響應(yīng),并不確定. 但也不能讓客戶端一直等下去

    2024年02月07日
    瀏覽(20)
  • 【linux 多線程并發(fā)】線程本地數(shù)據(jù)存儲的兩種方式,每個線程可以有同名全局私有數(shù)據(jù),以及兩種方式的性能分析

    ? 專欄內(nèi)容 : 參天引擎內(nèi)核架構(gòu) 本專欄一起來聊聊參天引擎內(nèi)核架構(gòu),以及如何實現(xiàn)多機的數(shù)據(jù)庫節(jié)點的多讀多寫,與傳統(tǒng)主備,MPP的區(qū)別,技術(shù)難點的分析,數(shù)據(jù)元數(shù)據(jù)同步,多主節(jié)點的情況下對故障容災(zāi)的支持。 手寫數(shù)據(jù)庫toadb 本專欄主要介紹如何從零開發(fā),開發(fā)的

    2024年02月03日
    瀏覽(28)
  • 【Java|多線程與高并發(fā)】JUC中常用的類和接口

    【Java|多線程與高并發(fā)】JUC中常用的類和接口

    JUC是Java并發(fā)編程中的一個重要模塊,全稱為 Java Util Concurrent (Java并發(fā)工具包),它提供了一組用于多線程編程的工具類和框架,幫助開發(fā)者更方便地編寫線程安全的并發(fā)代碼。 本文主要介紹 Java Util Concurrent 下的一些常用接口和類 Callable接口類似于Runnable. 有一點區(qū)別就是

    2024年02月12日
    瀏覽(20)
  • 【Java|多線程與高并發(fā)】設(shè)計模式-單例模式(餓漢式,懶漢式和靜態(tài)內(nèi)部類)

    【Java|多線程與高并發(fā)】設(shè)計模式-單例模式(餓漢式,懶漢式和靜態(tài)內(nèi)部類)

    設(shè)計模式是一種在軟件開發(fā)中常用的解決復(fù)雜問題的方法論。它提供了一套經(jīng)過驗證的解決方案,用于解決特定類型問題的設(shè)計和實現(xiàn)。設(shè)計模式可以幫助開發(fā)人員提高代碼的可重用性、可維護性和可擴展性。 設(shè)計模式有很多,本文主要介紹單例模式. 單例模式是一種創(chuàng)建型設(shè)

    2024年02月11日
    瀏覽(28)
  • qt創(chuàng)建線程的兩種方法

    第一種:繼承QThread類 方法描述 1。類MyThread繼承QThread, 2。重載MyThread中的run()函數(shù),在run()函數(shù)中寫入需要執(zhí)行的工作; 3。調(diào)用start()函數(shù)來啟動線程。 不是真的跨線程,子線程ID和主線程ID是同一個 第二種:QObject::moveToThread 這就是我要的子線程 //用于托管我的子線程

    2024年04月27日
    瀏覽(30)
  • 多線程與高并發(fā)--------線程池

    多線程與高并發(fā)--------線程池

    在開發(fā)中,為了提升效率的操作,我們需要將一些業(yè)務(wù)采用多線程的方式去執(zhí)行。 比如有一個比較大的任務(wù),可以將任務(wù)分成幾塊,分別交給幾個線程去執(zhí)行,最終做一個匯總就可以了。 比如做業(yè)務(wù)操作時,需要發(fā)送短信或者是發(fā)送郵件,這種操作也可以基于異步的方式完

    2024年02月13日
    瀏覽(26)
  • 多線程與高并發(fā)——并發(fā)編程(4)

    1.1 生產(chǎn)者消費者概念 生產(chǎn)者-消費者是設(shè)計模式的一種,讓生產(chǎn)者和消費者基于一個容器來解決強耦合的問題。生產(chǎn)者與消費者彼此之間不會直接通訊,而是通過一個容器(隊列)進行通訊。 生產(chǎn)者生產(chǎn)完數(shù)據(jù)后扔到容器中,不用等消費者來處理; 消費者也不需要去找生產(chǎn)

    2024年02月10日
    瀏覽(19)
  • 多線程與高并發(fā)——并發(fā)編程(5)

    多線程與高并發(fā)——并發(fā)編程(5)

    為什么要使用線程池? 在開發(fā)中,為了提升效率,我們需要將一些業(yè)務(wù)采用多線程的方式去執(zhí)行。比如,有一個比較大的任務(wù),可以將任務(wù)分成幾塊,分別交給幾個線程去執(zhí)行,最終做一個匯總即可。再比如,做業(yè)務(wù)操作時,需要發(fā)送短信或郵件,這些操作也可以基于異步的

    2024年02月09日
    瀏覽(37)
  • Python創(chuàng)建多線程的兩種常用方法

    Python創(chuàng)建多線程的兩種常用方法

    這篇文章主要為大家詳細介紹了Python中創(chuàng)建多線程的兩種常用方法,文中的示例代碼簡潔易懂,對我們掌握Python有一定的幫助,需要的可以收藏一下 經(jīng)過總結(jié),Python創(chuàng)建多線程主要有如下兩種方法: 函數(shù) 類 接下來,我們就來揭開多線程的神秘面紗。 在Python3中,Python提供了

    2024年02月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包