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

 更新时间:2024年01月18日 10:02:32   作者:小白不很白  
这篇文章主要介绍了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方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jcl与jul log4j1 log4j2 logback日志系统机制及集成原理

    jcl与jul log4j1 log4j2 logback日志系统机制及集成原理

    这篇文章主要介绍了jcl与jul log4j1 log4j2 logback的集成原理,Apache Commons-logging 通用日志框架与日志系统的机制,有需要的朋友可以借鉴参考下
    2022-03-03
  • SpringMVC获取HTTP中元素的实现示例

    SpringMVC获取HTTP中元素的实现示例

    本文主要介绍了SpringMVC获取HTTP中的元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Spring中的@Scope注解详细讲解及示例

    Spring中的@Scope注解详细讲解及示例

    这篇文章主要介绍了Spring中的@Scope注解详细讲解及示例,@Scope注解是 Spring IOC 容器中的一个作用域,在 Spring IOC 容器中,他用来配置Bean实例的作用域对象,需要的朋友可以参考下
    2023-11-11
  • Java设计模式之里氏替换原则精解

    Java设计模式之里氏替换原则精解

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。本篇介绍设计模式七大原则之一的里氏替换原则
    2022-02-02
  • JAVA中JSONObject对象和Map对象之间的相互转换

    JAVA中JSONObject对象和Map对象之间的相互转换

    这篇文章主要介绍了JAVA中JSONObject对象和Map对象之间的相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Spring Boot 2.X整合Spring-cache(让你的网站速度飞起来)

    Spring Boot 2.X整合Spring-cache(让你的网站速度飞起来)

    这篇文章主要介绍了Spring Boot 2.X整合Spring-cache(让你的网站速度飞起来),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 将内容写到txt文档里面并读取及删除的方法

    将内容写到txt文档里面并读取及删除的方法

    本文有个不错的示例,主要讲解如何将内容写到txt文档里面、读取文件里面的内容以及清除txt文件里面的内容
    2014-01-01
  • 使用Spring Data Jpa的CriteriaQuery一个陷阱

    使用Spring Data Jpa的CriteriaQuery一个陷阱

    使用Spring Data Jpa的CriteriaQuery进行动态条件查询时,可能会遇到一个陷阱,当条件为空时,查询不到任何结果,并不是期望的返回所有结果。这是为什么呢?
    2020-11-11
  • 在Spring Boot中如何使用log4j记录日志

    在Spring Boot中如何使用log4j记录日志

    这篇文章主要介绍如何在spring boot中引入log4j,以及一些基础用法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 查找IDEA文件目录下tomcat文件的具体位置

    查找IDEA文件目录下tomcat文件的具体位置

    IDEA中Tomcat文件目录位置可能在:C:\Users\用户名\.IntelliJIdea\system\tomcat或C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea\system\tomcat,可以通过运行Tomcat查看Server中显示的CATALINA_BASE找到对应路径
    2026-02-02

最新评论