java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Thread类下的Join方法

Java线程中Thread方法下的Join方法详解

作者:小白不很白

这篇文章主要介绍了Java线程中Thread方法下的Join方法详解,在项目中往往会遇到这样一个场景,就是需要等待几件事情都给做完后才能走下面的事情,这个时候就需要用到Thread方法下的Join方法,join方法是无参且没有返回值的,需要的朋友可以参考下

等待线程执行终止的join方法

在项目中往往会遇到这样一个场景,就是需要等待几件事情都给做完后才能走下面的事情。这个时候就需要用到Thread方法下的Join方法。join方法是无参且没有返回值的。

package com.baidu.onepakage;
public class JoinTest {
    public static void main(String[] args) throws InterruptedException {
        Thread theadOne = new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("TheadOne run over");
        });
        Thread threadTwo = new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("TheadTwo run over");
        });
        theadOne.start();
        Thread.sleep(1000);
        threadTwo.start();
        System.out.println("main 开始启动了");
        theadOne.join();
        threadTwo.join();
        System.out.println("main 结束了");
    }
}

上面代码在调用join方法的时候,主线程就被被阻塞了,只有当调用join的方法执行结束都才能够接着往下面执行。

执行结果:

System.out.println(“TheadOne run over”);
System.out.println(“TheadTwo run over”);
System.out.println(“main 开始启动了”);
System.out.println(“main 结束了”);

另外线程A调用线程B的join方法,当其他线程调用了线程A的interrupt()方法,则A线程会抛出InterruptedException异常而返回。

示例:

package com.baidu.onepakage;
public class JoinTest01 {
    public static void main(String[] args) {
        Thread threadOne = new Thread(() -> {
            for (; ; ) {
            }
        });
        // 获取主线程
        Thread mainThread = Thread.currentThread();
        // 线程2
        Thread threadTwo = new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 中断主线程
            mainThread.interrupt();
        });
        threadOne.start();
        threadTwo.start();
        try {
            threadOne.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println(Thread.currentThread().getName() + "发生了异常");
        }
    }
}

上面是Mian主方法抛出了异常,这是因为在在调用ThreadOne线程,和ThreadTwo线程时线程one还在执行中(死循环),这个时候main方法处于阻塞状态,当调用主方法的interrupt()方法后,Main方法已经被阻塞了,所以就抛出了异常并返回了。

到此这篇关于Java线程中Thread方法下的Join方法详解的文章就介绍到这了,更多相关Thread类下的Join方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文