生活随笔
收集整理的這篇文章主要介紹了
                                
Oracle官方并发教程之中断
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            原文鏈接,譯文鏈接,譯者: 蘑菇街-小寶 ??校對:梁海艦
 中斷是給線程的一個指示,告訴它應該停止正在做的事并去做其他事情。一個線程究竟要怎么響應中斷請求取決于程序員,不過讓其終止是很普遍的做法。這是本文重點強調的用法。
 一個線程通過調用對被中斷線程的Thread對象的interrupt()方法,發送中斷信號。為了讓中斷機制正常工作,被中斷的線程必須支持它自己的中斷(即要自己處理中斷)
 中斷支持
 線程如何支持自身的中斷?這取決于它當前正在做什么。如果線程正在頻繁調用會拋InterruptedException異常的方法,在捕獲異常之后,它只是從run()方法中返回。例如,假設在SleepMessages的例子中,關鍵的消息循環在線程的Runnable對象的run方法中,代碼可能會被修改成下面這樣以支持中斷:
    | 01 |  for?(int?i =?0; i < importantInfo.length; i++) {  | 
  | 02 |  ????// Pause for 4 seconds  | 
    | 04 |  ???????Thread.sleep(4000);  | 
  | 05 |  ????}?catch?(InterruptedException e) {  | 
  | 06 |  ???????// We've been interrupted: no more messages.  | 
        | 10 |  ?System.out.println(importantInfo[i]);  | 
     許多會拋InterruptedException異常的方法(如sleep()),被設計成接收到中斷后取消它們當前的操作,并在立即返回。
 如果一個線程長時間運行而不調用會拋InterruptedException異常的方法會怎樣? 那它必須周期性地調用Thread.interrupted()方法,該方法在接收到中斷請求后返回true。例如:
    | 1 |  for?(int?i =?0; i < inputs.length; i++) {  | 
  | 2 |  ????heavyCrunch(inputs[i]);  | 
  | 3 |  ????if?(Thread.interrupted()) {  | 
  | 4 |  ????????// We've been interrupted: no more crunching.  | 
         在這個簡單的例子中,代碼只是檢測中斷,并在收到中斷后退出線程。在更復雜的應用中,拋出一個InterruptedException異常可能更有意義。
    | 1 |  if?(Thread.interrupted()){  | 
  | 2 |  ???throw?new?InterruptedException();  | 
     這使得中斷處理代碼能集中在catch語句中。
 中斷狀態標記
 中斷機制通過使用稱為中斷狀態的內部標記來實現。調用Thread.interrupt()設置這個標記。當線程通過調用靜態方法Thread.interrupted()檢測中斷時,中斷狀態會被清除。非靜態的isInterrupted()方法被線程用來檢測其他線程的中斷狀態,不改變中斷狀態標記。
 按照慣例,任何通過拋出一個InterruptedException異常退出的方法,當拋該異常時會清除中斷狀態。不過,通過其他的線程調用interrupt()方法,中斷狀態總是有可能會立即被重新設置。
 文章轉自?并發編程網-ifeve.com
                            總結
                            
                                以上是生活随笔為你收集整理的Oracle官方并发教程之中断的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。