標籤:線程中斷
本文是學習網路上的文章時的總結,感謝大家無私的分享。
1、一個多個線程在執行的Java程式,只有當其全部的線程執行結束時(更具體的說,是所有非守護線程結束或者某個線程調用System.exit()方法的時候),它才會結束運行。有時,你需要為了終止程式而結束一個線程,或者當程式的使用者想要取消某個Thread對象正在做的任務。
2、Java提供中斷機制來通知線程表明我們想要結束它。中斷機制的特性是線程需要檢查是否被中斷,而且還可以決定是否相應結束的請求。所以,線程可以忽略插斷要求並且繼續運行。
3、Thread類還有其他的可以檢查線程是否被中斷的方法。例如,靜態方法interrupted()能檢查正在啟動並執行線程是否被中斷。isInterrupted()和interrupted()方法有著很重要的區別。第一個不會改變interrupted屬性值,但是第二個會設定成false。Interrupted()方法是一個靜態方法,建議使用isInterrupted()方法。
下面是代碼實現
package chapter;/** * * <p> * Description: 線程的中斷 * </p> * @author zhangjunshuai * @version 1.0 * Create Date: 2014-8-11 上午11:09:55 * Project Name: Java7Thread * * <pre> * Modification History: * Date Author Version Description * ----------------------------------------------------------------------------------------------------------- * LastChange: $Date:: $ $Author: $ $Rev: $ * </pre> * */public class PrimeGenerator extends Thread{@Overridepublic void run() {// TODO Auto-generated method stublong number = 1L;while(true){if(isPrime(number)){System.out.printf("Number %d is Prime\n",number);}if(isInterrupted()){System.out.printf("The Prime Generator has been Interrupted");return;}number++;}}/** * <p> * </p> * @author zhangjunshuai * @date 2014-8-11 下午2:48:31 * @param number * @return */private boolean isPrime(long number){if(number <=2){return true;}for(long i=2; i<number;i++){if((number%i)==0){return false;}}return true;}}
主程式調用
package chapter;public class Main3 {/** * <p> * </p> * @author zhangjunshuai * @date 2014-8-11 上午11:20:15 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubThread task = new PrimeGenerator();task.start();try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}task.interrupt();}}
實驗結果
參考:
並發編程網