背景:在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想要等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了。概括地讲:方法join()的作用是等待线程对象销毁。
代码示例:
实验一(主线程中没有使用join()方法):
自定义线程类
主函数中没有使用join()方法
结果:
运行结果(主线程未在子线程处理结束后再执行)
实验二(主线程中使用了join()方法):
主函数中使用了join()方法
结果:
运行结果(主线程在子线程处理结束后再执行)
总结:
1.方法join()的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的阻塞,等待线程x销毁后再继续执行线程z后面的代码。
2.方法join()具有使线程排队运行的作用,有些类似同步的运行效果。join与synchronized的区别是:join在内部使用wait()方法进行等待,而synchronized关键字使用的是“对象监视器”原理作为同步。(感兴趣的童鞋可以查看两方法的源代码验证哦)