Java多线程(五)停止线程 interrupt

调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程。

this.interrupted() :测试当前线程是否已经中断,执行后具有将状态标志清除为false的功能

isInterrupted() :   测试线程Thread对象是否已经是中断状态,但不清除状态标志。

public class InterruptDemo extends Thread{

    public void run(){
        super.run();
        try{
            
        for(int i =0;i< 500000;i++){
            if(this.isInterrupted()){
                System.out.println("run:" +InterruptDemo.interrupted());
                System.out.println("已经是停止状态了!");
                //throw new InterruptedException(); 代替break 解决 后面语句继续执行的问题, 即:System.out.println("我在for的下面,线程终止了");
//                break;
                throw new InterruptedException();
            }
            System.out.println("i="+(i+1));
        }
        System.out.println("我在for的下面,线程终止了");
        }catch(Exception e){
            System.out.println("进入run方法中的catch了!!");
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {

        try {
            InterruptDemo thread = new InterruptDemo();
            thread.start();
            Thread.sleep(2000);
            thread.interrupt();
            System.out.println("thread"+thread.isInterrupted());
            System.out.println("main:"+InterruptDemo.interrupted());
            
            //Thread.currentThread().interrupt();
            //System.out.println(Thread.interrupted());
            ///System.out.println(Thread.interrupted());
            
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

posted @ 2017-09-26 10:02  newlangwen  阅读(230)  评论(0编辑  收藏  举报