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实现了插队的效果