一個線程的輸入可能非常依賴于另外一個或者多個線程的輸出,此時這個線程就需要等待依賴線程執行完畢,才能繼續執行。JDK 提供了 join()操作來實現這個功能。
public final void join()
public final synchronized void join(long millis)
第一個 join()方法表示無線等待,他會一直阻塞當前線程,直到目標線程執行完畢。第二個方法給出了一個最大的等待時間,如果超過給定的時間目標線程還在執行,當前線程也會因為“等不及了”,而繼續往下執行。
/**
* Created by zhangjianghong on 2017/8/1.
*/
public class JoinMain {
public volatile static int i = 0;
public static class AddThread extends Thread{
@Override
public void run() {
for (i = 0; i < 10000; i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread addThread = new AddThread();
addThread.start();
addThread.join();
System.out.println(i);
}
}
如果沒有addThread.join(); 程序運行結果可能是 0 或者一個小于10000 的數字,是因為AddThread 線程還沒有跑結束,主線程就結束了,當加了join()方法時,表示主線程等待AddThread線程執行結束后再繼續執行,所以它的結果肯定是10000。