join方法作用:将指定线程加入到当前线程中。
示例:将thread线程加入到main线程中:
运行结果是:先等thread执行完,main再执行。
但有一个问题,跟踪进入thread的join方法时发现,join方法内部是wait实现,按照语义应该是thread去wait,为何实际运行起来是main被阻塞了?
public class TestThreadMethod {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行了");
});
thread.start();
thread.join();
System.out.println("主线程执行了");
}
}
原因是,Object的native wait方法是将当前线程阻塞,而不是将当前调用的对象的线程阻塞。觉得有点饶的话,请看下图: