首先打开源码查看join()方法:
1,没有参数的。可以看到join()方法调用同类中的一个有参join()方法,并传递参数0。
public final void join() throws InterruptedException {
join(0);
}
2.有一个long类型参数的join()方法使用了synchroinzed修饰,说明这个方法同一时刻只能被 一个实例或者方法调用。由于,传递的参数为0,所以,程序会进入如下代码的红色部分,在代码中以while循环的方式来判断当前线程是否已经启动处于活跃状态,如果已经启动处于活 跃状态,则调用同类中的wait()方法,并传递参数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 {