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

資訊專欄INFORMATION COLUMN

interrupt(),interrupted() 和 isInterrupted() 的區(qū)別

Meathill / 3156人閱讀

摘要:結(jié)論先行將調(diào)用該方法的對(duì)象所表示的線程標(biāo)記一個(gè)停止標(biāo)記,并不是真的停止該線程。獲取當(dāng)前線程的中斷狀態(tài),并且會(huì)清除線程的狀態(tài)標(biāo)記。因?yàn)閳?zhí)行后它會(huì)將狀態(tài)標(biāo)志清除,底層調(diào)用了,此處參數(shù)為。

1. 結(jié)論先行
interrupt():將調(diào)用該方法的對(duì)象所表示的線程標(biāo)記一個(gè)停止標(biāo)記,并不是真的停止該線程。

interrupted():獲取當(dāng)前線程的中斷狀態(tài),并且會(huì)清除線程的狀態(tài)標(biāo)記。是一個(gè)是靜態(tài)方法。

isInterrupted():獲取調(diào)用該方法的對(duì)象所表示的線程,不會(huì)清除線程的狀態(tài)標(biāo)記。是一個(gè)實(shí)例方法。

現(xiàn)在對(duì)各方法逐一進(jìn)行具體介紹:

2. interrupt()

首先我們來(lái)使用一下 interrupt() 方法,觀察效果,代碼如下:

public class MainTest {
   @Test
   public void test() {
       try {
           MyThread01 myThread = new MyThread01();
           myThread.start();
           myThread.sleep(2000);
           myThread.interrupt();
       } catch (Exception e) {
           System.out.println("main catch");
           e.printStackTrace();
       }
   }
}

public class MyThread01 extends Thread {
   @Override
   public void run() {
       super.run();
       for (int i = 0; i < 500; i++) {
           System.out.println("i= " + i);
       }
   }
}

輸出結(jié)果:

可以看出,子線程已經(jīng)執(zhí)行完成了。說(shuō)明 interrupt() 方法是不能讓線程停止,和我們一開(kāi)始所說(shuō)的那樣,它僅僅是在當(dāng)前線程記下一個(gè)停止標(biāo)記而已。

那么這個(gè)停止標(biāo)記我們又怎么知道呢?——此時(shí)就要介紹下面的 interrupted() 和 isInterrupted() 方法了。

3. interrupted() 和 isInterrupted()

interrupted() 方法的聲明為 public static boolean interrupted()

isInterrupted() 方法的聲明為 public boolean isInterrupted()

這兩個(gè)方法很相似,下面我們用程序來(lái)看下使用效果上的區(qū)別吧

先來(lái)看下使用 interrupted() 的程序。

@Test
public void test() {
      try {
          MyThread01 myThread = new MyThread01();
          myThread.start();
          myThread.sleep(1000);
//     7行: Thread.currentThread().interrupt(); // Thread.currentThread() 這里表示 main 線程
          myThread.interrupt();
          // myThread.interrupted() 底層調(diào)用了 currentThread().isInterrupted(true); 作用是判斷當(dāng)前線程是否為停止?fàn)顟B(tài)
          System.out.println("是否中斷1 " + myThread.interrupted());
          System.out.println("是否中斷2 " + myThread.interrupted());
      } catch (InterruptedException e) {
          System.out.println("main catch");
      }
  System.out.println("main end");
}

輸出結(jié)果:

由此可以看出,線程并未停止,同時(shí)也證明了 interrupted() 方法的解釋:測(cè)試當(dāng)前線程是否已經(jīng)中斷,這個(gè)當(dāng)前線程就是 main 線程,它從未中斷過(guò),所以打印結(jié)果都是 false。

那么如何使 main 線程產(chǎn)生中斷效果呢?將上面第 8 行代碼注釋掉,并將第 7 行代碼的注釋去掉再運(yùn)行,我們就可以得到以下輸出結(jié)果:

從結(jié)果上看,方法 interrupted() 的確判斷出了當(dāng)前線程(此例為 main 線程)是否是停止?fàn)顟B(tài)了,但為什么第二個(gè)布爾值為 false 呢?我們?cè)谧铋_(kāi)始的時(shí)候有說(shuō)過(guò)——interrupted() 測(cè)試當(dāng)前線程是否已經(jīng)是中斷狀態(tài),執(zhí)行后會(huì)將狀態(tài)標(biāo)志清除。

因?yàn)閳?zhí)行 interrupted() 后它會(huì)將狀態(tài)標(biāo)志清除,底層調(diào)用了 isInterrupted(true),此處參數(shù)為 true 。所以 interrupted() 具有清除狀態(tài)標(biāo)記功能。

在第一次調(diào)用時(shí),由于此前執(zhí)行了 Thread.currentThread().interrupt();,導(dǎo)致當(dāng)前線程被標(biāo)記了一個(gè)中斷標(biāo)記,因此第一次調(diào)用 interrupted() 時(shí)返回 true。因?yàn)?interrupted() 具有清除狀態(tài)標(biāo)記功能,所以在第二次調(diào)用 interrupted() 方法時(shí)會(huì)返回 false。

以上就是 interrupted() 的介紹內(nèi)容,最后我們?cè)賮?lái)看下 isInterrupted() 方法吧。

isInterrupted() 和 interrupted() 有兩點(diǎn)不同:一是不具有清除狀態(tài)標(biāo)記功能,因?yàn)榈讓觽魅?isInterrupted() 方法的參數(shù)為 false。二是它判斷的線程調(diào)用該方法的對(duì)象所表示的線程,本例為 MyThread01 對(duì)象。

我們修改一下上面的代碼,看下運(yùn)行效果:

@Test
public void test() {
   try {
       MyThread01 myThread = new MyThread01();
       myThread.start();
       myThread.sleep(1000);
       myThread.interrupt();
       // 修改了下面這兩行。
       // 上面的代碼是 myThread.interrupted();
       System.out.println("是否中斷1 " + myThread.isInterrupted());
       System.out.println("是否中斷2 " + myThread.isInterrupted());
   } catch (InterruptedException e) {
       System.out.println("main catch");
       e.printStackTrace();
   }
   System.out.println("main end");
}

輸出結(jié)果:

結(jié)果很明顯,因?yàn)?isInterrupted() 不具有清除狀態(tài)標(biāo)記功能,所以兩次都輸出 true。

參考文章:http://www.cnblogs.com/hapjin...

歡迎關(guān)注微信公眾號(hào)「不只Java」,后臺(tái)回復(fù)「電子書」,送說(shuō)不定有你想要的呢

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

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

相關(guān)文章

  • Thread中interrupt使用方法

    摘要:合理中斷線程合理中斷在類中提供了和方法這三個(gè)方法分別是用來(lái)結(jié)束暫?;謴?fù)線程但是都已經(jīng)被標(biāo)記為廢棄了因?yàn)橐粋€(gè)線程不應(yīng)該由其他線程來(lái)結(jié)束他應(yīng)該收到別人的通知然后自己在合適的位置結(jié)束如果不合理的結(jié)束會(huì)導(dǎo)致很多意外的結(jié)果比如臨界區(qū)還沒(méi)完全操作完提前 合理中斷線程 合理中斷 在Thread類中,提供了stop(),suspend()和resume()方法,這三個(gè)方法分別是用來(lái)結(jié)束,暫停,恢復(fù)線程...

    FingerLiu 評(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
  • 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
  • 線程系列一、線程創(chuàng)建與停止

    摘要:接口接口允許我們?cè)诰€程執(zhí)行的時(shí)候有返回值,以及拋出異常線程的停止類中的個(gè)停止方法三者區(qū)別將線程標(biāo)記為中斷返回線程當(dāng)前的中斷狀態(tài),不清除線程的中斷標(biāo)記返回線程當(dāng)前的中斷狀態(tài),并清除線程的中斷標(biāo)記與本質(zhì)都是調(diào)用了的。 1、通過(guò)繼承Thread類 public static class MThread extends Thread{ @Override public voi...

    BlackHole1 評(píng)論0 收藏0
  • Java Executors 源碼分析

    摘要:表示一個(gè)異步任務(wù)的結(jié)果,就是向線程池提交一個(gè)任務(wù)后,它會(huì)返回對(duì)應(yīng)的對(duì)象。它們分別提供兩個(gè)重要的功能阻塞當(dāng)前線程等待一段時(shí)間直到完成或者異常終止取消任務(wù)。此時(shí),線程從中返回,然后檢查當(dāng)前的狀態(tài)已經(jīng)被改變,隨后退出循環(huán)。 0 引言 前段時(shí)間需要把一個(gè)C++的項(xiàng)目port到Java中,因此時(shí)隔三年后重新熟悉了下Java。由于需要一個(gè)通用的線程池,自然而然就想到了Executors。 用了...

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

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

0條評(píng)論

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