解決Join方法的疑惑
很長時(shí)間對join方法感到疑惑,不明白到底是誰要阻塞,誰要繼續(xù)執(zhí)行(線程這部分亟需加強(qiáng))。今天和一網(wǎng)友交流后疑惑得到解決,在此表示感謝Stephen_Liu。
假如在main方法中有個線程A,執(zhí)行了A.join(),那么線程A繼續(xù)執(zhí)行,而main線程這阻塞在A.join()處,直到線程A執(zhí)行完畢并正常退出,此時(shí)main方法中的A.join()才返回,然后繼續(xù)執(zhí)行A.join()后面的代碼。
public class ThreadJoin extends Thread {
public static int n = 0;
static synchronized void inc() {
n++;
}
public void run() {
try {
for (int i = 0; i < 10; i++) {
inc();
sleep(3);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
Thread thread[] = new Thread[100];
for (int i = 0; i < thread.length; i++) {
thread[i] = new ThreadJoin();
}
for (int i = 0; i < thread.length; i++) {
thread[i].start();
}
for (int i = 0; i < thread.length; i++) {
thread[i].join(); //不使用這句話n是個隨機(jī)數(shù),使用n=1000
}
System.out.println("n=" + ThreadJoin.n);
}
}