線程中斷

 

中斷api

//返回線程狀態位狀態
public boolean isInterrupted()

//設置線程中斷狀態位爲true
public void interrupt()

//返回線程中斷狀態,並清除中斷狀態
public static boolean interrupted()

 

不一樣狀態的中斷效果

一、NEW和TERMINATED

NEW:還未啓動,start
TERMINATED:線程運行結束
效果:並不會設置線程的中斷標識位,什麼事也不會發生。html

二、RUNNABLE

運行狀態,不必定全部處於RUNNABLE狀態的線程都能得到CPU運行,沒有得到cpu時間片的沒有真正在運行
效果:只是設置中斷狀態位,不會讓線程實際中斷,須要程序本身去判斷(增長程序靈活性)。api

public void run(){
    while(true){
        //判斷線程是否被中斷了
        if (Thread.currentThread().isInterrupted()){
            System.out.println("exit MyThread");
            break;
        }
    }
}

 

三、BLOCKED

該狀態說明該線程因爲競爭某個鎖失敗被掛在了阻塞隊列上
效果:只是設置中斷狀態位,不會讓線程實際中斷spa

 

四、WAITING和TIMED_WAITING

WAITING:無期限等待知道notify
TIMED_WAITING:等待指定時間
線程運行中因爲缺乏某個條件而被掛起在某個對象的條件隊列上
效果:會拋出一個InterruptedException異常,並清空中斷標誌位線程

 

總結

NEW和TERMINATED對於中斷操做幾乎是屏蔽的
RUNNABLE和BLOCKED相似,對於中斷操做只是設置中斷標誌位並無強制終止線程,對於線程的終止權利依然在程序手中。
WAITING/TIMED_WAITING狀態下的線程對於中斷操做是敏感的,他們會拋出異常並清空中斷標誌位。code

 

 

參考:http://www.javashuo.com/article/p-ooliqbte-bb.htmlhtm

相關文章
相關標籤/搜索