线程中断

 

中断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

相关文章
相关标签/搜索