3.2.3join()方法和interrupt()方法同时使用出现异常

来源:互联网 发布:董易奇八字软件 编辑:程序博客网 时间:2024/06/05 16:01

package demo;/** * Created by sunyifeng on 17/10/17. */public class ThreadA extends Thread {    @Override    public void run() {        super.run();        for (int i = 0; i < Integer.MAX_VALUE; i++) {            String str = new String();            Math.random(); // TODO: 这句不能注释        }    }}
package demo;/** * Created by sunyifeng on 17/10/17. */public class ThreadB extends Thread {    @Override    public void run() {        try {            super.run();            ThreadA threadA = new ThreadA();            threadA.start();            threadA.join();            System.out.println("线程B,该我执行了");        } catch (InterruptedException e) {            System.out.println("线程B,进入异常了");            e.printStackTrace();        }    }}
package demo;/** * Created by sunyifeng on 17/10/17. */public class ThreadC extends Thread {    private ThreadB threadB;    public ThreadC(ThreadB threadB) {        super();        this.threadB = threadB;    }    @Override    public void run() {        super.run();        threadB.interrupt();    }}
package demo;/** * Created by sunyifeng on 17/10/17. */public class Run {    public static void main(String[] args) {        try {            ThreadB threadB = new ThreadB();            threadB.start();            Thread.sleep(500);            ThreadC threadC = new ThreadC(threadB);            threadC.start();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

运行结果:

线程B,进入异常了
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1245)
at java.lang.Thread.join(Thread.java:1319)
at demo.ThreadB.run(ThreadB.java:13)

程序分析:

1、线程B的join方法与interrupt方法如果彼此相遇,则会出现异常;

2、线程B出现异常自动终止,线程A不会停止直到执行完才停止。


原创粉丝点击