欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java多線程之中斷線程(Interrupt)的使用詳解

 更新時間:2013年05月04日 14:43:19   作者:  
interrupt字面上是中斷的意思,但在Java里Thread.interrupt()方法實際上通過某種方式通知線程,并不會直接中止該線程

interrupt方法

interrupt字面上是中斷的意思,但在Java里Thread.interrupt()方法實際上通過某種方式通知線程,并不會直接中止該線程。具體做什么事情由寫代碼的人決定,通常我們會中止該線程。

    如果線程在調(diào)用Object類的wait()、wait(long)或wait(long, int)方法,或者該類的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 方法過程中受阻,則其中斷狀態(tài)將被清除,它還將收到一個 InterruptedException。

    如果該線程在可中斷的通道(java.nio.channels.InterruptibleChannel)上的 I/O 操作中受阻,則該通道將被關閉,該線程的中斷狀態(tài)將被設置并且該線程將收到一個 ClosedByInterruptException。

    如果該線程在一個 Selector (java.nio.channels.Selector) 中受阻,則該線程的中斷狀態(tài)將被設置,它將立即從選擇操作返回,并可能帶有一個非零值,就好像調(diào)用了選擇器的 wakeup 方法一樣。

    如果以前的條件都沒有保存,則該線程的中斷狀態(tài)將被設置。

    中斷一個不處于活動狀態(tài)的線程不需要任何作用。

檢測中斷

如何檢測中斷決定于線程所做的事情。

    如果線程調(diào)用可以拋出InterruptException的方法,則捕獲InterruptException,然后在catch塊中處理(通常是退出run方法以中斷線程)

    如果調(diào)用其它方法,則可以在空閑時檢查Thread.interrupted以判斷是否收到中斷信號,確認收到中斷信號后進行處理??梢話伋鲆粋€InterruptException從而和前一種處理方法保持一致

中斷狀態(tài)

線程的中斷機制是使用中斷狀態(tài)這一內(nèi)部標志實現(xiàn)的。中斷狀態(tài)在調(diào)用線程的interrupt()方法時被設置(參考上面的interrupt方法說明)。

 

有兩種方法可以取得線程的中斷狀態(tài):

    調(diào)用靜態(tài)方法Thread.interrupted(),該方法除了返回當前線程的中斷狀態(tài)外,還會清除當前線程的中斷狀態(tài)。換句話說,如果連續(xù)兩次調(diào)用該方法,則第二次調(diào)用將返回 false(在第一次調(diào)用已清除了其中斷狀態(tài)之后,且第二次調(diào)用檢驗完中斷狀態(tài)前,當前線程再次中斷的情況除外)。

    調(diào)用指定線程的isInterrupted()方法,該方法只返回指定線程的中斷狀態(tài)而不影響該線程的中斷狀態(tài)。

有兩種方法可以清除線程的中斷狀態(tài):

    如上所述,調(diào)用Thread.interrupted()

    調(diào)用該線程的interrupt()方法引發(fā)InterruptedException的時候同時就已經(jīng)清除了所在線程的中斷狀態(tài),包括Object類的wait()、wait(long)或wait(long, int)方法,或者線程的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 方法

相關文章

  • Java數(shù)組的基本操作方法整理

    Java數(shù)組的基本操作方法整理

    這篇文章主要介紹了Java數(shù)組的基本操作方法整理,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • java如何使用正則表達式限制特殊字符的個數(shù)

    java如何使用正則表達式限制特殊字符的個數(shù)

    這篇文章主要介紹了java如何使用正則表達式限制特殊字符的個數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • spring通過導入jar包和配置xml文件啟動的步驟詳解

    spring通過導入jar包和配置xml文件啟動的步驟詳解

    這篇文章主要介紹了spring通過導入jar包和配置xml文件啟動,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 簡述springboot及springboot cloud環(huán)境搭建

    簡述springboot及springboot cloud環(huán)境搭建

    這篇文章主要介紹了簡述springboot及springboot cloud環(huán)境搭建的方法,包括spring boot 基礎應用環(huán)境搭建,需要的朋友可以參考下
    2017-07-07
  • 如何使用MyBatis框架實現(xiàn)增刪改查(CRUD)操作

    如何使用MyBatis框架實現(xiàn)增刪改查(CRUD)操作

    本文主要介紹了如何使用MyBatis框架實現(xiàn)增刪改查(CRUD)操作。首先介紹了MyBatis框架的基本概念和使用方法,然后分別介紹了如何使用MyBatis實現(xiàn)增刪改查操作。最后,通過一個簡單的示例演示了如何使用MyBatis框架實現(xiàn)CRUD操作。
    2023-05-05
  • java實現(xiàn)租車系統(tǒng)

    java實現(xiàn)租車系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)租車系統(tǒng),以及遇到的兩個問題解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Spring Boot啟動過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動教程詳解

    Spring Boot啟動過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和Sta

    這篇文章主要介紹了Spring Boot啟動過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動教程詳解,需要的朋友可以參考下
    2017-04-04
  • Java通過JavaMail發(fā)送郵件功能

    Java通過JavaMail發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了Java通過JavaMail發(fā)送郵件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換

    IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換

    這篇文章主要介紹了IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Java使用Servlet生成驗證碼圖片

    Java使用Servlet生成驗證碼圖片

    這篇文章主要為大家詳細介紹了Java使用Servlet生成驗證碼圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論