Java之多线程interrupt中断线程的三种方法

版权声明:本文为博主原创文章,转载记得标明出处。 https://blog.csdn.net/Genius_in_the_left/article/details/70237857

方法一:


@Override
public void run(){
    for(int i = 0; i < 100; i++){
        System.out.println(this.getname()+":"+i);
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){
            System.out.println("异常结束!");
            return;  //在异常中直接返回,从而打断线程
        }
    }
}

方法二(Java推荐的方法):

//通过自定义一个FlagThread中断线程的方法,调用直接中断

public void FlagThread extends Thread{
    //设置中断标志
    private boolean isInterrupted = false;

    //中断线程方法
    public void stopCurrentThread(){
        this.isInterrupted = true; //中断标志
        super.interrupt(); //调用系统中断,发起异常
    }

    @Override
    public void run(){
        while(!isInterrupted){
            try{
                for(int i = 0; i < 100; i++){
                    System.out.println(this.getname()+":"+i);
                    Thread.sleep(1000);
                }
            }catch(InterruptedException e){
                 //中断抛出异常,通过标记方式结束线程
            }
        }

        System.out.println("异常结束!");
    }
}

方法三

正常方式中断线程,要求不能在循环中调用sleep()方法

关于IO读写的线程停止

理论上无法停止,只能中断IO流,抛出异常后再处理。最好的建议就是将大数据的 IO 读写操作放在循环中进行,这样可以在每次循环中都有线程停止的时机,这也将问题转化成了如何停止正在运行中的线程的问题了。

展开阅读全文

没有更多推荐了,返回首页