成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

線程的中斷 - Interrupts

chenatu / 1711人閱讀

摘要:我們通常使用中斷去終止線程如何中斷線程調(diào)用,向線程發(fā)送指示。當(dāng)獲取到指示時,這些方法將拋出異常。捕獲這個異常,并即可中斷線程。

Interrupt ?

An interrupt is an indication to a thread that it should stop what it is doing and do something else.

中斷(interupt)是一個指示,指示一個線程停止正在做的事情,并做一些其他的事情。

我們通常使用 中斷 去終止線程

如何中斷線程 ?

調(diào)用 interrupt(),向線程發(fā)送 interrupt 指示。

如果一個線程內(nèi),頻繁的調(diào)用一個可以 throw InterruptedException 的方法,在接收到 interrupt 指示時,拋出 InterruptedException 。只需要 catch 該異常,并 return,即可退出 run 方法 —— 即終止了線程。

for (int i = 0; i < importantInfo.length; i++) {
    // Pause for 4 seconds
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        // We"ve been interrupted: no more messages.
        return;
    }
    // Print a message
    System.out.println(importantInfo[i]);
}

Thread 的很多方法都可以 throw InterruptedException,比如 Thread.sleep 方法。當(dāng)獲取到 interrupt 指示時,這些方法將拋出異常。捕獲這個異常,并 return ,即可中斷線程。

如果一個線程會運行很長時間,且沒有調(diào)用任何可以 throw InterruptedException 的方法,怎么辦?必須定期運行 Thread.interrupted 方法,當(dāng)獲取 interrupt 指令時返回 true

for (int i = 0; i < inputs.length; i++) {
    heavyCrunch(inputs[i]);
    if (Thread.interrupted()) {
        // We"ve been interrupted: no more crunching.
        return;
    }
}

如果項目比較復(fù)雜的話,throw new InterruptedException 更有意義

if (Thread.interrupted()) {
    throw new InterruptedException();
}
中斷狀態(tài)標(biāo)志 - The Interrupt Status Flag

The interrupt mechanism is implemented using an internal flag known as the interrupt status. Invoking Thread.interrupt sets this flag. When a thread checks for an interrupt by invoking the static method Thread.interrupted, interrupt status is cleared. The non-static isInterrupted method, which is used by one thread to query the interrupt status of another, does not change the interrupt status flag.

interrupt 機制的實現(xiàn),使用了一個內(nèi)部的flag,用于標(biāo)識 interrupt status 。

調(diào)用 靜態(tài)方法 Thread.interrupted(用于檢查當(dāng)前 Thread 是否 interrupt),interrupt status 會被清除。
調(diào)用 非靜態(tài)方法 isInterrupted(用于一個 Thread 查詢另一個 Thread 是否 interrupt),不會清除 interrupt status。

參考資料

Interrupts

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65196.html

相關(guān)文章

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

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

    fevin 評論0 收藏0
  • FutureTask源碼分析

    摘要:從而可以啟動和取消異步計算任務(wù)查詢異步計算任務(wù)是否完成和獲取異步計算任務(wù)的返回結(jié)果。原理分析在分析中我們沒有看它的父類,其中有一個方法,返回一個,說明該方法可以獲取異步任務(wù)的返回結(jié)果。 FutureTask介紹 FutureTask是一種可取消的異步計算任務(wù)。它實現(xiàn)了Future接口,代表了異步任務(wù)的返回結(jié)果。從而FutureTask可以啟動和取消異步計算任務(wù)、查詢異步計算任務(wù)是否完成...

    luqiuwen 評論0 收藏0
  • 記一次PHP并發(fā)性能調(diào)優(yōu)實戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來分散任務(wù)到不同的機制,通常也被稱為處理器間中斷,。文章編寫計劃 待完成: 詳細(xì)介紹用到的各個工具 作者: 萬千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無論是php, java, 還是其他任何語言都是用. 如果你有php使用經(jīng)驗, 那肯定就更好了 業(yè)務(wù)背景 框架及相應(yīng)環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    番茄西紅柿 評論0 收藏0
  • 記一次PHP并發(fā)性能調(diào)優(yōu)實戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來分散任務(wù)到不同的機制,通常也被稱為處理器間中斷,。文章編寫計劃 待完成: 詳細(xì)介紹用到的各個工具 作者: 萬千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無論是php, java, 還是其他任何語言都是用. 如果你有php使用經(jīng)驗, 那肯定就更好了 業(yè)務(wù)背景 框架及相應(yīng)環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    xeblog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<