1. join()介绍
join() 定义在Thread.java中。
join() 的作用:让“主线程”等待“子线程 ”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解:
// 主线程 public class Father extends Thread { public void run() { Son s = new Son(); s.start(); s.join(); ... } } // 子线程 public class Son extends Thread { public void run() { ... } }
说明:
上面的有两个类Father(主线程类)和Son(子线程类)。因为Son是在Father中创建并启动的, 所以,Father是主线程类,Son是子线程类。
在Father主线程中,通过new Son()新建“子线程 s”。接着通过s.start()启动“子线程s”,并且调用s.join()。在调用s.join()之后, Father主线程会一直等待,直到“子线程s”运行完毕;在“子线程s”运行完毕之 后,Father主线程才能接着运行。 这也就是我们所说的“join()的作用,是让主线程会等待子线程 结束之后才能继续运行”!
2. join()源码分析(基于JDK1.7.0_40)
public final void join() throws InterruptedException { join(0); } public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }
说明:
从代码中,我们可以发现。当millis==0时,会进入while(isAlive())循环;即只要子线程 是活的,主线程就不停的等待。
我们根据上面解释join()作用时的代码来理解join()的用法!
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, join
, 运行
, public
, java join
, 子线程
, son
, Java子线程
, 子线程执行完毕
interruptedexception
,以便于您获取更多的相关知识。