解決Join方法的疑惑

 很長時間對join方法感到疑惑,不明白到底是誰要阻塞,誰要繼續執行(線程這部分亟需加強)。今天和一網友交流後疑惑得到解決,在此表示感謝Stephen_Liu

 假如在main方法中有個線程A,執行了A.join(),那麼線程A繼續執行,而main線程這阻塞在A.join()處,直到線程A執行完畢並正常退出,此時main方法中的A.join()才返回,然後繼續執行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是個隨機數,使用n=1000
        }
        System.out.println("n=" + ThreadJoin.n);
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章