用interrupt()中断Java线程
http://hapinwater.iteye.com/blog/310558
最近在學習Java線程相關的東西,和大家分享一下,有錯誤之處歡迎大家指正.
假如我們有一個任務如下,交給一個Java線程來執行,如何才能保證調用interrupt()來中斷它呢?
運行這個程序,我們發現調用interrupt()后,程序仍在運行,如果不強制結束,程序將一直運行下去,如下所示:
雖然中斷發生了,但線程仍然在進行,離開線程有兩種常用的方法:
拋出InterruptedException和用Thread.interrupted()檢查是否發生中斷,下面分別看一下這兩種方法:
1.在阻塞操作時如Thread.sleep()時被中斷會拋出InterruptedException(注意,進行不能中斷的IO操作而阻塞和要獲得對象的鎖調用對象的synchronized方法而阻塞時不會拋出InterruptedException)
程序運行結果如下:
可以看到中斷任務時讓任務拋出InterruptedException來離開任務.
2.Thread.interrupted()檢查是否發生中斷.Thread.interrupted()能告訴你線程是否發生中斷,并將清除中斷狀態標記,所以程序不會兩次通知你線程發生了中斷.
程序運行結果如下:
我們可結合使用兩種方法來達到可以通過interrupt()中斷線程.請看下面例子:
在point1之前處point2之后發生中斷會產生兩種不同的結果,可以通過修改InterruptTaskTest main()里的Thread.sleep()的時間來達到在point1之前產生中斷或在point2之后產生中斷.
如果在point1之前發生中斷,程序會在調用Thread.sleep()時拋出InterruptedException從而結束線程.這和在Thread.sleep()時被中斷是一樣的效果.程序運行結果可能如下:
如果在point2之后發生中斷,線程會繼續執行到下一次while判斷中斷狀態時.程序運行結果可能如下:
?
總結
以上是生活随笔為你收集整理的用interrupt()中断Java线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel sample
- 下一篇: Java NIO、NIO.2学习笔记