Java線程中斷

來源:互聯網
上載者:User

Java的線程中斷採用類似CPU中斷的思想。即Thread對象有一個int的標識,用來表示是否有中斷髮生。1表示有,0表示無。線程的代碼檢測中斷標識,並做相應的處理。

1. 如何設定中斷狀態

     如果需要設在中斷標識為1,那麼調用Thread的interrupt方法。此方法僅僅設定中斷標識為1,不做其他動作。

2. 如何處理中斷狀態

     2.1 線程中正在啟動並執行代碼應該不停的檢測是否發生中斷,並做出相應的處理並重設中斷標識為0。通常的情況是忽略中斷,或者退出程式當有中斷髮生。

     2.2 線程中的代碼正在阻塞(調用Object 類的 wait()wait(long)wait(long, int) 方法,Thread類的join()join(long)join(long,
int)
sleep(long)sleep(long, int)),當中斷標識被置為1時,在代碼阻塞出拋出中斷異常並自動清除中斷狀態(重設中斷標識為0)。線程代碼應該對中斷異常做出相應的出來。

     2.3 線程中的代碼在可中斷的資源上阻塞(NIO),當中斷標識被置為1時,有兩種情況(不自動清楚中斷狀態):

            1)可中斷資源關閉,在代碼阻塞處拋出資源關閉異常。

            2)立刻返回空結果。

          此時線程代碼需要處理異常和中斷。

3. 清除中斷狀態

     調用Thread類的interrupted方法,該方法返回當前的中斷狀態,並重設中斷標識為0

4. 特殊阻塞的中斷

   ServerSocket的accept方法一直阻塞,其方法本省不會出來中斷。如果要中斷阻塞,需要調用ServerSocket的close方法,此時accept方法中斷阻塞並拋出IOException

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.