程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java多線程當中斷線程(Interrupt)的應用詳解

Java多線程當中斷線程(Interrupt)的應用詳解

編輯:關於JAVA

Java多線程當中斷線程(Interrupt)的應用詳解。本站提示廣大學習愛好者:(Java多線程當中斷線程(Interrupt)的應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java多線程當中斷線程(Interrupt)的應用詳解正文


interrupt辦法

interrupt字面上是中止的意思,但在Java裡Thread.interrupt()辦法現實上經由過程某種方法告訴線程,其實不會直接中斷該線程。詳細做甚麼工作由寫代碼的人決議,平日我們會中斷該線程。

    假如線程在挪用Object類的wait()、wait(long)或wait(long, int)辦法,或許該類的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 辦法進程中受阻,則個中斷狀況將被消除,它還將收到一個 InterruptedException。

    假如該線程在可中止的通道(java.nio.channels.InterruptibleChannel)上的 I/O 操作中受阻,則該通道將被封閉,該線程的中止狀況將被設置而且該線程將收到一個 ClosedByInterruptException。

    假如該線程在一個 Selector (java.nio.channels.Selector) 中受阻,則該線程的中止狀況將被設置,它將立刻從選擇操作前往,並能夠帶有一個非零值,就似乎挪用了選擇器的 wakeup 辦法一樣。

    假如之前的前提都沒有保留,則該線程的中止狀況將被設置。

    中止一個不處於運動狀況的線程不須要任何感化。

檢測中止

若何檢測中止決議於線程所做的工作。

    假如線程挪用可以拋出InterruptException的辦法,則捕捉InterruptException,然後在catch塊中處置(平日是加入run辦法以中止線程)

    假如挪用其它辦法,則可以在余暇時檢討Thread.interrupted以斷定能否收到中止旌旗燈號,確認收到中止旌旗燈號落後行處置。可以拋出一個InterruptException從而和前一種處置辦法堅持分歧

中止狀況

線程的中止機制是應用中止狀況這一外部標記完成的。中止狀況在挪用線程的interrupt()辦法時被設置(參考下面的interrupt辦法解釋)。

 

有兩種辦法可以獲得線程的中止狀況:

    挪用靜態辦法Thread.interrupted(),該辦法除前往以後線程的中止狀況外,還會消除以後線程的中止狀況。換句話說,假如持續兩次挪用該辦法,則第二次挪用將前往 false(在第一次挪用已消除了個中斷狀況以後,且第二次挪用磨練完中止狀況前,以後線程再次中止的情形除外)。

    挪用指定線程的isInterrupted()辦法,該辦法只前往指定線程的中止狀況而不影響該線程的中止狀況。

有兩種辦法可以消除線程的中止狀況:

    如上所述,挪用Thread.interrupted()

    挪用該線程的interrupt()辦法激發InterruptedException的時刻同時就曾經消除了地點線程的中止狀況,包含Object類的wait()、wait(long)或wait(long, int)辦法,或許線程的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 辦法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved