线程中断方法

1使用退出标志终止线程

public class ThreadSafe extends Thread {
    public volatile boolean exit = false; 
        public void run() { 
        while (!exit){
            //do something
        }
    } 
}

2使用interrupt()方法终止线程(也可利用InterruptedException逃离阻塞状态)
用法:

class MyThread extends Thread {  
    public void run() {  
        try {  //阻塞过程捕获中断异常来退出
            while(!Thread.currentThread().isInterrupted()) {  //非阻塞过程中通过判断中断标志来退出
                //当达到队列容量时,在这里会阻塞  
                //put的内部会调用LockSupport.park()这个是用来阻塞线程的方法  
                //当其他线程,调用此线程的interrupt()方法时,会设置一个中断标志  
                //LockSupport.part()中检测到这个中断标志,会抛出InterruptedException,并清除线程的中断标志  
                //因此在异常段调用Thread.currentThread().isInterrupted()返回为false  
                ArrayBlockingQueue.put(somevalue);   
            }  
        } catch (InterruptedException e) {  
            //由于阻塞库函数,如:Object.wait,Thread.sleep除了抛出异常外,还会清除线程中断状态,因此可能在这里要保留线程的中断状态  
            Thread.currentThread().interrupt();  
        }  
    }  
    public void cancel() {  
        interrupt();  
    }  
}  

外部调用

MyThread thread = new MyThread();  
thread.start();  
......  
thread.cancel();  
thread.isInterrupted();

你可能感兴趣的:(线程中断方法)