Thread join() 方法解析

java.lang.Threadjoin()方法部分源码如下:

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_继续执行。

原文地址:https://www.cnblogs.com/xiaojintao/p/6358549.html