一篇不到300字短文 带你彻底理解Java中Thread.join实现原理
一句话说明Thread.join作用
Thread.join()可以使当前线程等待目标线程结束之后才继续运行。
Thread.join使用方式
如上述代码所示,可以把main线程当作当前线程,A、B线程当作目标线程。那么Thread.join()方法在示例代码中保证A线程执行完毕再执行B线程,B执行完毕再执行main线程后续代码,从而保证了线程的顺序执行。
Thread.join实现原理
Thread.join源码如下:
如源码所示,Thread.join()实际上调用的是Thread.join(millis)方法,Thread.join()相当于Thread.join(0)。
Thread.join(millis)是一个被synchronized修饰的非静态同步方法,即synchronized锁的是Thread实例对象。
Thread.isAlive()是用来判断线程是否终止,终止则返回false。Thread.join(millis)检查线程未中终则调用wait()方法来暂定当前线程运行。同时Java虚拟机会在目标线程run方法执行结束时调用目标线程对象的notifyAll()方法来唤醒目标线程对象中的等待线程,当然也会唤醒通过Thread.join(millis)来暂定运行的线程。
总结:Thread.join()相当于Thread.join(0),通过目标线程对象的wait和notifyAll方法来实现。
参考
《Java多线程实战指南(核心篇)》第五章——线程间协作
END
笔者是一位热爱互联网、热爱互联网技术、热于分享的年轻人,如果您跟我一样,我愿意成为您的朋友,分享每一个有价值的知识给您。喜欢作者的同学,点赞+转发+关注哦!