线程join()方法的深度理解

java 复制代码
package com.tushang.study.Thread;

public class JoinTest {
    public static void main(String[] args) throws InterruptedException {
        Thread threadA = new Thread(() -> {
            System.out.println("线程A");
        });
        Thread threadB = new Thread(() -> {
            try {
                threadA.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程B");
        });
        Thread threadC = new Thread(() -> {
            try {
                threadB.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程C");
        });
        threadB.start();
        threadC.start();
//        threadA.start();
    }
}

输出:

线程B

线程C

原因:

  • 对未启动(NEW 状态)的线程调用 join,JVM 会立刻返回,不会阻塞。
  • 已启动但未结束的线程调用 join,会阻塞直到线程结束。

如果把注释去掉,则会固定输出线程A,线程B,线程C

最后的结论:

对未启动(NEW 状态)的线程调用 join,JVM 会立刻返回,不会阻塞,不管是没有start还是执行的时候还没到start(没来的急),都会立刻返回,不会阻塞 。但是对已启动但未结束的线程调用 join,会阻塞直到线程结束。

相关推荐
故事和你912 分钟前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论
小羊Yveesss13 分钟前
2026年前端开发新趋势:智能协同、工具革新与场景深耕
前端·ai
XiYang-DING15 分钟前
【Java EE】定时器
java·python·java-ee
Fuly102419 分钟前
java面试知识点复习
java·开发语言·面试
北顾笙98019 分钟前
day37-数据结构力扣
数据结构·算法·leetcode
Dxy123931021622 分钟前
HTML中的Canvas可以干哪些事情
前端·html
啦啦啦_999924 分钟前
1. 逻辑回归
算法·机器学习·逻辑回归
悟乙己26 分钟前
解析 Agent 时代的 HTML PPT SKILLS: html-ppt-skill
前端·html·powerpoint
ZC跨境爬虫27 分钟前
跟着 MDN 学 HTML day_2:(表单分组与高级输入控件实战)
前端·javascript·css·ui·html
信徒_44 分钟前
API 网关技术选型
java