亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java的Interrupt與線程中斷

beanlam / 1151人閱讀

摘要:中斷狀態(tài)每一個(gè)線程都有一個(gè)屬性,表示中斷狀態(tài),初始值為。中斷線程正常情況下,只是將線程的中斷狀態(tài)變?yōu)?。線程中可以通過(guò)輪詢中斷狀態(tài),做出相應(yīng)的處理。中斷一個(gè)不支持中斷的類如一個(gè)類會(huì)阻塞線程,但不支持中斷。

中斷狀態(tài)

每一個(gè)線程都有一個(gè)boolean屬性,表示中斷狀態(tài),初始值為false。

中斷線程:Thread.interrupt()

正常情況下,只是將線程的中斷狀態(tài)變?yōu)閠rue。線程中可以通過(guò)輪詢中斷狀態(tài),做出相應(yīng)的處理。
如果線程在阻塞狀態(tài)下,線程將退出阻塞且中斷狀態(tài)將被清除(即為false),且會(huì)拋出InterruptException。
(IO操作忽略)

查詢中斷狀態(tài)

(1)isInterrupted(),返回當(dāng)前的中斷狀態(tài),不會(huì)改變中斷狀態(tài)。
(2)static interrupted(),返回當(dāng)前中斷狀態(tài),且會(huì)清除中斷狀態(tài)。(即第二次調(diào)用將返回 false)

處理InterruptedException

(1)繼續(xù)拋出。
如果拋出InterruptedException意味著是一個(gè)阻塞方法,那么調(diào)用一個(gè)阻塞方法則意味著調(diào)用者也是一個(gè)阻塞方法,應(yīng)該有某種策略來(lái)處理InterruptedException。
(2)捕獲InterruptedException,執(zhí)行清理,再重新拋出InterruptedException。
(3)再次調(diào)用interrupt()。
當(dāng)由Runnable定義的任務(wù)調(diào)用一個(gè)可中斷的方法時(shí),在這種情況下,不能重新拋出InterruptedException,因?yàn)镽unnable接口的run方法不允許拋出異常。
當(dāng)一個(gè)阻塞方法檢測(cè)到中斷并拋出InterruptedException但是不能重新拋出它,那么應(yīng)該保留中斷發(fā)生的證據(jù),以便調(diào)用棧中更高層的代碼能知道中斷,并對(duì)中斷做出響應(yīng),該任務(wù)可以通過(guò)調(diào)用interrupt()以重新中斷當(dāng)前線程來(lái)完成。

public void run() {
        try {
             while (true) {
                 Task task = queue.take(10, TimeUnit.SECONDS);
                 task.execute();
             }
         }
         catch (InterruptedException e) {
             // Restore the interrupted status
             Thread.currentThread().interrupt();
         }
    }
中斷一個(gè)不支持中斷的類

如一個(gè)IO類會(huì)阻塞線程,但不支持中斷。則可以寫一個(gè)新IO類,繼承Thread類,重寫interrupt方法,在interrupt中關(guān)閉IO,最后調(diào)用super.interrupt();

待決中斷

在進(jìn)入阻塞前被中斷,被稱為待決中斷。
在調(diào)用阻塞方法時(shí),會(huì)立刻拋出InterruptException。

參考文章:多線程-interrupt(),isInterrupted(),interrupted() - 小路不懂2

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/73306.html

相關(guān)文章

  • Thread類源碼解讀(3)——線程中斷interrupt

    摘要:現(xiàn)在終止一個(gè)線程,基本上只能靠曲線救國(guó)式的中斷來(lái)實(shí)現(xiàn)。中斷機(jī)制的核心在于中斷狀態(tài)和異常中斷狀態(tài)設(shè)置一個(gè)中斷狀態(tài)清除一個(gè)中斷狀態(tài)方法同時(shí)會(huì)返回線程原來(lái)的中斷的狀態(tài)。中斷異常中斷異常一般是線程被中斷后,在一些類型的方法如中拋出。 前言 系列文章目錄 線程中斷是一個(gè)很重要的概念,通常,取消一個(gè)任務(wù)的執(zhí)行,最好的,同時(shí)也是最合理的方法,就是通過(guò)中斷。 本篇我們主要還是通過(guò)源碼分析來(lái)看看中斷的概...

    fevin 評(píng)論0 收藏0
  • java線程生命周期線程中斷

    摘要:線程中斷線程中斷就是一種協(xié)作機(jī)制。它并不會(huì)真正的中斷一個(gè)正在運(yùn)行的線程,而只是發(fā)出中斷請(qǐng)求,然后由線程在下一個(gè)合適的時(shí)刻中斷自己。 線程池生命周期包括: RUNNING:接收新的任務(wù)并處理隊(duì)列中的任務(wù) SHUTDOWN:不接收新的任務(wù),但是處理隊(duì)列中的任務(wù) STOP:不接收新的任務(wù),不處理隊(duì)列中的任務(wù),同時(shí)中斷處理中的任務(wù) TIDYING:所有的任務(wù)處理完成,有效的線程數(shù)是0 TER...

    suxier 評(píng)論0 收藏0
  • 詳細(xì)分析Java中斷機(jī)制

    摘要:沒(méi)有提供一種安全直接的方法來(lái)停止某個(gè)線程,但是提供了中斷機(jī)制。中斷的原理中斷機(jī)制是一種協(xié)作機(jī)制,也就是說(shuō)通過(guò)中斷并不能直接終止另一個(gè)線程,而需要被中斷的線程自己處理中斷。線程的中斷狀態(tài)由該方法清除。測(cè)試線程是否已經(jīng)中斷。 1. 引言 當(dāng)我們點(diǎn)擊某個(gè)殺毒軟件的取消按鈕來(lái)停止查殺病毒時(shí),當(dāng)我們?cè)诳刂婆_(tái)敲入quit命令以結(jié)束某個(gè)后臺(tái)服務(wù)時(shí)……都需要通過(guò)一個(gè)線程去取消另一個(gè)線程正在執(zhí)行的任務(wù)...

    bergwhite 評(píng)論0 收藏0
  • Java 線程中斷(interrupt)阻塞 (park)區(qū)別

    摘要:很多開發(fā)人員包括我,尤其是剛進(jìn)入軟件行業(yè)的新手,認(rèn)為設(shè)置線程中斷就是表示線程停止了,不往前執(zhí)行了,其實(shí)不是這樣的,線程中斷只是一個(gè)狀態(tài)而已,表示已中斷,表示未中斷獲取線程中斷狀態(tài),如果中斷了返回否則返回設(shè)置線程中斷不影響線程的繼續(xù)執(zhí)行,但是 ? ? 很多Java開發(fā)人員(包括我),尤其是剛進(jìn)入軟件行業(yè)的新手,認(rèn)為Java設(shè)置線程中斷就是表示線程停止了,不往前執(zhí)行了, Thread.cu...

    王偉廷 評(píng)論0 收藏0
  • (三)從jvm層面了解線程啟動(dòng)和停止

    摘要:最后我們重點(diǎn)關(guān)注與一下實(shí)際就是調(diào)用平臺(tái)創(chuàng)建線程的方法來(lái)創(chuàng)建線程。線程的中斷標(biāo)識(shí)判斷了解了方法的作用以后,再回過(guò)頭來(lái)看中這段代碼,就很好理解了。 文章簡(jiǎn)介 這一篇主要圍繞線程狀態(tài)控制相關(guān)的操作分析線程的原理,比如線程的中斷、線程的通信等,內(nèi)容比較多,可能會(huì)分兩篇文章 內(nèi)容導(dǎo)航 線程的啟動(dòng)的實(shí)現(xiàn)原理 線程停止的實(shí)現(xiàn)原理分析 為什么中斷線程會(huì)拋出InterruptedException ...

    mudiyouyou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<