三:線程中斷

線程中斷并不會(huì)讓線程立即退出,而是給線程發(fā)送一個(gè)通知,告訴目標(biāo)線程,現(xiàn)在希望他退出,至于線程接到通知后如何處理,完全由目標(biāo)線程自己確定.
JDK里面,線程中斷有三個(gè)方法:

       public void Thread.interrupt()   //中斷線程
       public boolean Thread.isInterrupt()   //判斷線程是否被中斷
       public static boolean Thread.interrupted() //判斷線程是否被中斷,并且清除當(dāng)前中斷狀態(tài)
public static void main(String[] args) throws Exception {
    Thread t1 = new Thread(){
        @Override
        public void run() {
            Thread.yield();
        }
    };
    t1.start();
    Thread.sleep(2000);
    t1.interrupt();
}

此處雖然對(duì)t1進(jìn)行了中斷,但是t1中沒(méi)有任何中斷處理的邏輯代碼,所以這個(gè)中斷不會(huì)有任何左右.
 如果希望t1 在中斷后退出,做以下即可
public static void main(String[] args)throws InterruptedException {
    Thread t1 = new Thread(){
        @Override
        public void run() {
            while (true){
                if (Thread.currentThread().isInterrupted()){
                    System.out.println(Thread.currentThread().getName());
                    System.out.println("Interrupt");
                    break;
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    System.out.println("線程在睡眠時(shí)被中斷");
                    Thread.currentThread().interrupt();
                }
                Thread.yield();
            }
        }
    };
    t1.start();
    Thread.sleep(1000);
    t1.interrupt();
}
需要注意的是Thread.sleep(); 會(huì)拋出  InterruptedException 異常 ,此異常不是運(yùn)行時(shí)異常,也就是說(shuō)程序必須捕獲處理它. 當(dāng)程序運(yùn)行被中斷時(shí),System.out.println("線程在睡眠時(shí)被中斷")被執(zhí)行,但是為了保證數(shù)據(jù)完整性,需要再次執(zhí)行Thread.currentThread().interrupt()方法以重置標(biāo)志位,才能再次判斷中斷情況。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請(qǐng)注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,298評(píng)論 0 14
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,810評(píng)論 11 349
  • 本文選譯自《Threading Programming Guide》。 導(dǎo)語(yǔ) 線程技術(shù)作為在單個(gè)應(yīng)用程序中并發(fā)執(zhí)行...
    巧巧的二表哥閱讀 2,595評(píng)論 4 24
  • 最讓我不高興的是,這人明明比我大,卻總是喊我“老區(qū)”前,“老區(qū)”后的,哼,哼,哼,我不老,我不老,我不老?。ㄖ匾?..
    零距離_b1a3閱讀 502評(píng)論 3 3

友情鏈接更多精彩內(nèi)容