概括的讲:
如果是在线程A(threadA)中执行线程B的 threadB.join(); 那么threadA执行到threadB.join()时,会暂时停止,让线程threadB执行先执行完成后,再执行A后面的代码逻辑。
实现原理:
join方法内部的实现是synchronized + object.wait()方法,比如在主线程main中执行 t.join(); 主线程main会持有调用join方法的线程t的锁,join方法内部判断线程t是否isAlive(), 若线程t 仍在执行,则调用wait()方法,主线程A进入waiting状态,此时调用join方法的线程t在继续执行,执行完成后会调用notifyAll方法,主线程从waiting状态中被调度出来,继续执行。
使用场景举例:
在一次代码执行中,先用线程a异步执行一段业务逻辑A, 主线程继续执行业务逻辑B, 然后执行到业务逻辑C的时候,需要用到业务逻辑A的执行结果(有些类似Callable), 这时候在执行业务逻辑C之前,调用 a.join();保证业务逻辑A执行完成后,再执行C。