美文网首页
停止线程-异常法

停止线程-异常法

作者: 装完逼立马跑 | 来源:发表于2018-07-16 13:10 被阅读0次

public class MyThread extends Thread{
    @Override
    public void run() {
        super.run();
        try{
            for (int i = 0; i < 500000; i++) {
                //通过 interrupted 方法是测试 当前线程 是否已经是中断状态
                // (该方法是Thread类的静态方法,执行后会将状态标识清除为false的功能)
                //另一个 isInterrupted 方法是测试 线程Thread对象 是否已经是中断状态,
                // 执行后不清除状态标识
                if(this.interrupted()){
                    System.out.println("在for中退出,并抛出异常");
                    throw new InterruptedException();
                }
                System.out.println("i:"+i);
            }
            System.out.println("for下面");
        }catch (InterruptedException e){
            System.out.println("进入 MyThread catch 异常块");
            e.printStackTrace();
        }
    }
}


public class RunThread {

    public static void main(String[] args) {
        try{
            MyThread myThread = new MyThread();
            myThread.start();
            //先让main线程睡眠一段时间,保证线程mythread能运行一会儿
            Thread.sleep(200);
            //在myThread线程之后一段时间后,调用interrupt方法,将myThread的状态标识为false
            //这时,myThread就会抛出异常
            myThread.interrupt();
        }catch (InterruptedException e){
            //由于线程main和线程myThread是异步执行的,所以在myThread抛出异常时,
            // main已经执行完毕了,所以没有执行这个catch块和最下面的sout
            System.out.println("进入main catch 异常块");
            e.printStackTrace();
        }
        System.out.println("end main");
    }
}

运行结果(main线程睡眠期间,myThread运行一段时间,然后main线程中将myThread状态标识为true,此时myThread线程判断标识为true,则抛出异常,进入catch,在myThread抛出异常期间,由于main和myThread是异步的,所以main在抛出异常之前就已经执行完毕了)


相关文章

  • 停止线程-异常法

    运行结果(main线程睡眠期间,myThread运行一段时间,然后main线程中将myThread状态标识为tru...

  • 1.7.3能停止的线程——异常法

    程序运行结果: 上面的示例虽然停止了线程,但如果for语句下面还有语句,还是会继续运行的。示例如下: 运行结果如下...

  • C#线程安全及lock使用

    1.首先我们先探讨一下当我们的子线程内部发生异常之后,该线程将会直接停止,确没有将异常抛出,这时我们将会如何处理呢...

  • 一个线程运行时发生异常会怎样?

    如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕...

  • Java——一个线程运行时发生异常的处理

    如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕...

  • 多线程_2_停止和暂停

    线程停止 停止线程是在多线程开发时很重要的技术点,掌握线程停止技术可以对线程的停止进行有效的处理。 停止线程的方法...

  • java并发之守护线程

    java中有两种线程,用户线程和守护线程用户线程:主线程停止时,用户线程不会停止守护线程:主线程停止时,守护线程也...

  • Java多线程核心技术笔记1

    线程停止 判断线程是否停止 测试当前线程是否停止,是指调用该方法的线程是否停止。如果当前状态为已停止,调用该方法返...

  • 线程停止总结

    1 单线程停止 2 线程池停止

  • 1.7.8使用return停止线程

    将方法interrupt()与return结合使用也能实现停止线程的效果。 运行结果为: 不过还是建议使用“抛异常...

网友评论

      本文标题:停止线程-异常法

      本文链接:https://www.haomeiwen.com/subject/oezvpftx.html