java線程中join()方法

jdk7對此一句話:Waits for this thread to die(等待這個線程死亡)其它的線程的狀況如何就不太清楚了。 多線程

仍是本身動手筆劃兩下:用三個線程來測試t1,t2,main 測試

1、Thread t1 = new Thread(){
            public void run(){
                int i = 0;
                while(i++ < 10){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("t1:" + i);
                }
            }
            
        };
        Thread t2 = new Thread(){
            public void run(){
                int i = 0;
                while(i++ < 100){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("t2:" + i);
                }
            }
            
        };
        t1.start();
        try {
            t1.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        t2.start();
       
        
        for(int i = 0;i < 1000; i++){
            
            System.out.println("main:" + i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } this

這個程序結果是 t1先執行完(t1 is died),而後t2 和 main交叉輸出結果。 線程

2、將t1.join()放到t2.start()後面 it

   t1.start();
     
   t2.start(); io

  try {
            t1.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } thread

(其它的同上) jdk

先是t1和t2交叉執行,t1執行完後(t1 is died),剩下的t2還沒執行的部分和main交叉執行。 程序

3、 將t1.join()放到最後面,則三個線程跟普通多線程沒什麼區別,誰先執行完誰先死。。。 方法

總之,根據我運行出的結果看join()是阻塞在它後面的線程 ,只要在這個以前的則不受影響,包括主線程。

因此第一句話完整的說法是:等待調用這個方法(join()方法)的線程死亡後,此方法後面的線程才能執行,前面的線程不受影響。

(若有不對或不實的地方,請多多批評和指正)   

相關文章
相關標籤/搜索