JUC--设计模式_join原理
JUC–join原理
-
JUC–join原理
-
博主以黑马JUC进行学习
定义
-
标准定义
join()是线程对象的方法,调用方线程会阻塞暂停,直到被调用的目标线程完全执行完毕、终止退出,调用方线程才会恢复执行。 -
核心作用
解决多线程执行顺序不可控的问题,强制实现线程串行依赖,保证业务逻辑的先后顺序。
-
设计模式定位
属于并发设计模式中的同步模式,是实现「生产者 - 消费者」「两阶段终止」「线程池任务等待」等设计模式的底层依赖。
底层实现原理(JDK 源码核心)
Java 中 Thread.join() 的底层是基于 Object.wait() / notifyAll() 的等待 - 通知机制,伪代码逻辑:
1 | // Thread.join() 底层简化源码 |
关键机制:
- 加锁:
join()是同步方法,锁为目标线程对象本身; - 阻塞:调用方线程进入
wait()状态,释放锁,暂停执行; - 唤醒:JVM 在目标线程执行完毕、终止退出时,会自动调用
notifyAll()唤醒所有等待该线程的线程; - 退出:唤醒后再次检查线程状态,确认终止后,
join()方法返回,调用方恢复执行。
核心特性
- 阻塞性:调用
join()的线程会完全阻塞,不占用 CPU 资源; - 等待终止:必须等目标线程彻底运行结束才会放行,不是等待某一步执行;
- 可超时:支持
join(long millis),超时后自动放行,避免无限等待; - 可中断:等待中的线程可以被
interrupt()中断,抛出中断异常; - 无锁竞争优化:底层基于 JVM 原生等待通知,无用户态锁竞争,性能高效。