前提:spa
設有兩個線程,其中一個爲主線程,在主線程中調用另一個線程,稱爲目標線程線程
情景:code
在主線程中建立子線程,並啓動子線程,而子線程中要進行大量的耗時運算,當主線程處理到某個位置時,須要用到子線程的處理結果(此時子線程還未結束),這時候就要用到join();方法。在主線程的某個位置執行了目標線程.join();方法後,主線程將再也不繼續向下執行,而將等待目標線程終止後,主線程纔會再向下執行。 資源
代碼例子以下 :unicode
package commicropower;
it
class JoinTest1 implements Runnable{io
public static int a = 0; class
public void run() { 方法
for (int k = 0; k < 5; k++) { im
a = a + 1;
}
}
}
public class JoinTest {
public static void main(String[] args) throws Exception {
Runnable r = new JoinTest1();
Thread t = new Thread(r);
t.start();
t.join();
System.out.println(JoinTest1.a);
}
}
加入t.join();方法運行結果爲5 不加此方法, 運行結果爲0
總結:當主線程 main方法執行System.out.println(a);這條語句時,線程尚未真正開始運行,或許正在爲它分配資源準備運行。由於爲線程分配資源須要時間,而main方法執行完t.start()方法後繼續往下執行System.out.println(a);,這個時候獲得的結果是a尚未被 改變的值0 。怎樣才能讓輸出結果爲5!其實很簡單,join() 方法提供了這種功能。join() 方法,它可以使調用該方法的線程在此以前執行完畢。