在主線程中啟動了子線程,如果子線程要進行大量耗時運行,主線程往往早于子線程結束,如果主線程想等在子線程結束后再結束,如主線程想要使用子線程運算結果,這時就需要使用join()方法, join()方法的作用是等待線程對象銷毀,在當前線程中加入子線程,當前線程會轉為等待狀態,等到子線程運行結束后,當前線程再繼續向下執行。
package com.wkcto.join;
import java.util.Random;
/**
* 演示join方法
*/
public class Test {
static class SubThread extends Thread{
@Override
public void run() {
int xx = new Random().nextInt(10000);
System.out.println("在子線程中產生了數據: " + xx);
try {
Thread.sleep(xx); //模擬子線程運行耗時
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException {
SubThread t = new SubThread();
t.start();
// Thread.sleep();
t.join(); //程序執行這條語句,當前main線程會轉為等待狀態,等到t線程運行結束后,當前線程會轉為Runnable可運行狀態
System.out.println("當前線程是主線程,想在t線程執行完后再執行,可以在這條語句前通過sleep()讓主線程睡眠,但是睡眠的時長如何確定? 因為子線程耗時不確定,所以主線程睡眠的時長不確定.這時,就可以使用join()方法");
}
}