Java线程中Thread方法下的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方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
客户端Socket与服务端ServerSocket串联实现网络通信
这篇文章主要为大家介绍了客户端Socket与服务端ServerSocket串联实现网络通信的内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助2022-03-03
Java8内存模型PermGen Metaspace实例解析
这篇文章主要介绍了Java8内存模型PermGen Metaspace实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-03-03
spring cloud实现Eureka注册中心的HA的方法
本篇文章主要介绍了spring cloud实现Eureka注册中心的HA的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-01-01


最新评论