Java線程的中斷狀態(tài)

??一般我們在使用線程的過程中會遇到中斷一個線程的請求,java中有stop劝枣、suspend等方法埃元,但被認為是不完全的,所以棄用了谚赎,現(xiàn)在在Java中可以通過iterrupt來請求中斷線程淫僻。
??在Java中主要通過三個方法來進行中斷線程操作:
??(1)interrupt()诱篷,進行線程中斷操作,將線程中的中斷標(biāo)志位置位雳灵,置為true棕所;
??(2)interrupted(),對線程中斷標(biāo)識符進行復(fù)位悯辙,重新置為false琳省;
??(3)isInterrupt(),檢查中斷標(biāo)識符的狀態(tài)躲撰,ture還是false针贬;
??先來看看interrupt()方法,

 public class ThreadTest {
    public static  class  MyTestRunnable implements Runnable{
        @Override
        public void run() {
          while (Thread.currentThread().isInterrupted()){ //獲得當(dāng)前子線程的狀態(tài)
            System.out.println("停止");
        }
    }
  public static void main(String[] args) {
        MyTestRunnable myTestRunnable=new MyTestRunnable();
        Thread thread=new Thread(myTestRunnable, "Test");
        thread.start();
        thread.interrupt();
   }
}

運行后的結(jié)果為:
結(jié)果1.png

??發(fā)現(xiàn)他會循環(huán)打印結(jié)果拢蛋,線程仍在不斷運行桦他,說明它并不能中斷運行的線程,只能改變線程的中斷狀態(tài)瓤狐,調(diào)用interrupt()方法后只是向那個線程發(fā)送一個信號瞬铸,中斷狀態(tài)已經(jīng)設(shè)置,至于中斷線程的具體操作础锐,在代碼中進行設(shè)計嗓节。
要怎樣結(jié)束這樣的循環(huán),在循環(huán)中添加一個return即可:

public class ThreadTest {
    public static  class  MyTestRunnable implements Runnable{
        @Override
        public void run() {
          while (Thread.currentThread().isInterrupted()){ //獲得當(dāng)前子線程的狀態(tài)
            System.out.println("停止");
           return皆警;
        }
    }
結(jié)果2.png

現(xiàn)在是線程沒有堵塞的情況下拦宣,線程能夠不斷檢查中斷標(biāo)識符,但是如果在線程堵塞的情況下信姓,就無法持續(xù)檢測線程的中斷狀態(tài)鸵隧,如果在阻塞的情況下發(fā)現(xiàn)中斷標(biāo)識符的狀態(tài)為true,就會在阻塞方法調(diào)用處拋出一個InterruptException異常意推,并在拋出異常前將中斷標(biāo)識符進行復(fù)位豆瘫,即重新置為false;需要注意的是被中斷的線程不一定會終止,中斷線程是為了引起線程的注意,被中斷的線程可以決定如何去響應(yīng)中斷菊值。
??如果不知道拋出InterruptedException異常后如何處理塘安,一般在catch方法中使用Thread.currentThread().isInterrupt()方法將中斷標(biāo)識符重新置為true

        @Override
        public void run() {
            try {
                sleep(1000000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                Thread.currentThread().interrupt();
            }
        }
}

下面來看看如何使用interrupt來中斷一個線程祖屏,首先先看如果不調(diào)用interrupt()方法:



    public static  class  MyTestRunnable implements Runnable{
        private int i;
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()){
                i++;
                System.out.println("i = "+i);
                //return;
            }
            System.out.println("停止");
        }
    }
    public static void main(String[] args) {
        MyTestRunnable myTestRunnable=new MyTestRunnable();
        Thread thread=new Thread(myTestRunnable, "Test");
        thread.start();
    }
}

結(jié)果為:
結(jié)果3.png

??可以看出在沒有調(diào)用interrupt方法將中斷標(biāo)識符置為ture的時候号坡,線程執(zhí)行的判斷是循環(huán)中的方法所以是循環(huán)打印造虏,下面再看添加了interrupt方法后的結(jié)果:

 public static void main(String[] args) {
        MyTestRunnable myTestRunnable=new MyTestRunnable();
        Thread thread=new Thread(myTestRunnable, "Test");
        thread.start();
       thread.interrupt();
    }
}
2019-08-26 14:34:08屏幕截圖.png

因為中斷標(biāo)識符被置為了true所以執(zhí)行的是下面的語句儿子,然后線程結(jié)束瓦哎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蒋譬,更是在濱河造成了極大的恐慌割岛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡铲,死亡現(xiàn)場離奇詭異蜂桶,居然都是意外死亡,警方通過查閱死者的電腦和手機也切,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門扑媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雷恃,你說我怎么就攤上這事疆股。” “怎么了倒槐?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵旬痹,是天一觀的道長。 經(jīng)常有香客問我讨越,道長两残,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任把跨,我火速辦了婚禮人弓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘着逐。我一直安慰自己崔赌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布耸别。 她就那樣靜靜地躺著健芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秀姐。 梳的紋絲不亂的頭發(fā)上慈迈,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音省有,去河邊找鬼痒留。 笑死,一個胖子當(dāng)著我的面吹牛锥咸,可吹牛的內(nèi)容都是我干的狭瞎。 我是一名探鬼主播细移,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搏予,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弧轧?” 一聲冷哼從身側(cè)響起雪侥,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碗殷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后速缨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锌妻,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年旬牲,在試婚紗的時候發(fā)現(xiàn)自己被綠了仿粹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡原茅,死狀恐怖吭历,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擂橘,我是刑警寧澤晌区,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站通贞,受9級特大地震影響朗若,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昌罩,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一哭懈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峡迷,春花似錦银伟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夯辖,卻和暖如春琉预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒿褂。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工圆米, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啄栓。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓娄帖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昙楚。 傳聞我的和親對象是個殘疾皇子近速,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容