源码分析:我们看到,在join方法中,他使线程阻塞的方式是调用wait方法。
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; } } }
分析wait方法源码:wait方法是被native修饰的,说明直接使用其他语言与操作系统交互,停止当前线程,也就是当前正在调用join方法执行的线程。
如果代码如图:
主线程是执行线程,将被阻塞。