java多线程-理解join

本文深入解析Java线程中的join方法,解释了为何该方法实际上使调用线程进入等待状态,而非被调用线程。通过分析join方法的源码,阐述了其如何实现插队效果,即确保被调用线程B执行完毕后,调用线程A才能继续运行。同时,文章澄清了wait方法的作用机制,强调其仅能在同步块中使用,并释放当前线程持有的锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有线程: A和B, A线程的run方法中调用了B.join()

join网上都翻译为: 插队(一直没理解)

在查看join的源码时, 没理解为什么jion里面的 wait() 方法为什么不是让B等待, 反而是让A等待了

按照惯性思维,  B.join->wait()那就应该让B进入等待

 

这说明对wait()方法不够了解

wait是让当前线程进入等待状态直到被notify/notifyAll通知, 并释放锁, 前提是只能在synchronize修饰的 同步块中, 如果当前线程不是对象锁的持有者, 则会抛出异常IllegalMonitorStateException

即:

1.在join源码中 synchronize是修饰在方法上的(说明满足了使用wait()的条件)

2.A线程是调用者, b.join()方法是被调用的,   所以当前线程指的就是A

所以jion源码中的wait(), 是让A进入等待, 从而让B实现了插队的效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值