Thread join() 方法解析
java.lang.Thread
的join()
方法部分源码如下:
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()){ //1
wait(0); //2
}
}else{
//....省略
}
}
首先该方法签名是_synchronized_。
持有当前线程(ta)对象锁的线程(tb)在调用ta.join()
方法后,线程_tb_会执行到位置1处,即不断判断线程_ta_是否存活,然后执行wait(0)
,执行该操作会导致线程_tb_进入等待状态,然后等待,知道线程_ta_执行结束,会调用自身的notifyAll()
方法(这里得好好看看Thread
的源码,没找到),然后_tb_继续执行。