java多线程-理解join

假设有线程: 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实现了插队的效果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值