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

資訊專(zhuān)欄INFORMATION COLUMN

java之interrupt中斷線程

geekzhou / 2147人閱讀

摘要:中線程在運(yùn)行過(guò)程中可以通過(guò)方法進(jìn)行中斷,這里需要提到幾個(gè)的注意點(diǎn)中斷狀態(tài)是可以被清除或者說(shuō)恢復(fù)的中斷請(qǐng)求不是一定會(huì)被響應(yīng)如包中的一些操作,只會(huì)標(biāo)記中斷狀態(tài),而對(duì)線程并沒(méi)有實(shí)際影響調(diào)用并不是立即中斷線程執(zhí)行,而是傳遞了中斷請(qǐng)求下面看如果在這里

java中線程在運(yùn)行過(guò)程中可以通過(guò)interrupt方法進(jìn)行中斷,這里需要提到幾個(gè)的注意點(diǎn):

1、中斷狀態(tài)是可以被清除或者說(shuō)恢復(fù)的
2、中斷請(qǐng)求不是一定會(huì)被響應(yīng)(如io包中的一些操作,只會(huì)標(biāo)記中斷狀態(tài),而對(duì)線程并沒(méi)有實(shí)際影響)
3、調(diào)用interrupt并不是立即中斷線程執(zhí)行,而是傳遞了中斷請(qǐng)求

下面看demo

public class MyInterrupt implements Runnable{


    private volatile int i = 0;
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {

            System.out.println(i++ + String.valueOf(Thread.currentThread().isInterrupted()));
            
            //Point1:如果在這里調(diào)用中斷請(qǐng)求,程序會(huì)在i=20時(shí)拋出異常,但不會(huì)中斷,線程繼續(xù)執(zhí)行下去
            //if (i == 20) {
            //    cancel();
            //}
            try {
                Thread.sleep(100);
                //this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();

            }
            //Point2:在此處調(diào)用中斷請(qǐng)求,最后打印 19:false  isInterrupted()返回true所以不在進(jìn)入循環(huán)體
            if (i == 20) {
                cancel();
            }

        }
    }

    public void cancel(){
        Thread.currentThread().interrupt();
    }

    public static void main(String[] args) {
        new Thread(new MyInterrupt()).start();
    }
}

在point1處去中斷時(shí)候?yàn)槭裁闯绦驎?huì)繼續(xù)執(zhí)行,這里我們看下sleep方法以及wait方法的doc

 /**
     * Causes the currently executing thread to sleep (temporarily cease
     * execution) for the specified number of milliseconds, subject to
     * the precision and accuracy of system timers and schedulers. The thread
     * does not lose ownership of any monitors.
     *
     * @param  millis
     *         the length of time to sleep in milliseconds
     *
     * @throws  IllegalArgumentException
     *          if the value of {@code millis} is negative
     *
     * @throws  InterruptedException
     *          if any thread has interrupted the current thread. The
     *          interrupted status of the current thread is
     *          cleared when this exception is thrown.
     */
    public static native void sleep(long millis) throws InterruptedException;
    

在jdk8中的注釋中我們可以發(fā)現(xiàn)@throws中說(shuō)明了,如果任意線程發(fā)出了中斷請(qǐng)求,當(dāng)拋出InterruptedException異常后,中斷狀態(tài)會(huì)被清除,也就是說(shuō)該線程不會(huì)被中斷,再次調(diào)用isInterrupted方法則會(huì)返回false。

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

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

相關(guān)文章

  • Java線程線程的創(chuàng)建、中斷、狀態(tài)與屬性

    摘要:中斷線程當(dāng)線程的方法方法體執(zhí)行完畢自然終止或在方法中出現(xiàn)沒(méi)有捕獲的異常時(shí)意外終止,線程將終止。如果被中斷線程被阻塞,就無(wú)法檢測(cè)中斷狀態(tài),就會(huì)產(chǎn)生異常。 多進(jìn)程與多線程的本質(zhì)區(qū)別在于:每個(gè)進(jìn)程擁有自己的一整套變量,而線程則共享數(shù)據(jù)。如果需要執(zhí)行一個(gè)比較耗時(shí)的任務(wù),應(yīng)該使用獨(dú)立的線程。 可以通過(guò)實(shí)現(xiàn)Runnable接口或繼承Thread類(lèi)來(lái)創(chuàng)建獨(dú)立的線程。 1) 實(shí)現(xiàn)Ruannable接口...

    liangdas 評(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高并發(fā)從零到放棄(二)

    摘要:可以用代替可以用代替定義的對(duì)象的值是不可變的今天就先到這里,大家可以看看這些內(nèi)容的拓展記得點(diǎn)關(guān)注看更新,謝謝閱讀 前言 java高并發(fā)第二篇講的是java線程的基礎(chǔ)依舊不多說(shuō)廢話 線程和進(jìn)程 進(jìn)程是操作系統(tǒng)運(yùn)行的基礎(chǔ),是一個(gè)程序運(yùn)行的實(shí)體,windows上打開(kāi)任務(wù)管理器就能看到進(jìn)程線程是輕量級(jí)的進(jìn)程,是程序執(zhí)行的最小單位,是在進(jìn)程這個(gè)容器下進(jìn)行的 線程基本操作 新建一個(gè)線程類(lèi)有兩種方式...

    cloud 評(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
  • 從源碼的角度再學(xué)「Thread」

    摘要:前言中的線程是使用類(lèi)實(shí)現(xiàn)的,在初學(xué)的時(shí)候就學(xué)過(guò)了,也在實(shí)踐中用過(guò),不過(guò)一直沒(méi)從源碼的角度去看過(guò)它的實(shí)現(xiàn),今天從源碼的角度出發(fā),再次學(xué)習(xí),愿此后對(duì)的實(shí)踐更加得心應(yīng)手。如果一個(gè)線程已經(jīng)啟動(dòng)并且尚未死亡,則該線程處于活動(dòng)狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000017963014?w=1080&h=720); 前言 Java...

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

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

0條評(píng)論

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