join() 的作用
当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。
比如在A线程
中调用B线程
的join()
方法,会阻塞A线程
,直到B线程
执行完成,才会继续执行A线程
join() 的构造方法
join() 一共有三个构造方法,分别是无参、一个参数、两个参数:
public final void join() throws InterruptedException;
public final synchronized void join(long millis) throws InterruptedException;
public final synchronized void join(long millis, int nanos) throws InterruptedException;
- 三个方法都被final修饰,无法被子类重写。
- 无参版本和两个参数版本最终都调用了一个参数的版本。
- join() 和 join(0)是等价的,表示一直等下去;join(非0)表示等待一段时间。
join() 使用demo
package com.study.test;
public class Parent {
public static void main(String[] args) throws InterruptedException {
System.out.println("当前运行在主线程");
Thread child = new Thread() {
@Override
public void run() {
System.out.println("当前运行在子线程");
try {
Thread.sleep(5 * 1000L);
} catch (InterruptedException e) {
}
}
};
child.start();
System.out.println("子线程start");
child.join();// 主线程必须等待child线程运行完再继续运行
System.out.println("主线程必须等待子线程执行完成再结束");
}
}
运行结果: