2017-07-24 127 views
-4

當我運行下面的代碼。總是首先打印線程0,然後線程1和線程2並行運行。Java t.join()阻塞方法調用

我想了解thread.join調用是否阻止調用? 也想知道在這種情況下主線程會發生什麼。

沒有在文檔中的任何地方,連接被稱爲阻塞呼叫。

class TestMultithreadJoin{ 

    public static void main(String[] args) throws InterruptedException{ 

     Thread t1 = new Thread(new Runnable(){ 
      public void run(){ 
       for(int i = 0; i<=100;i++){ 
        System.out.println(" Name :"+Thread.currentThread().getName()); 
       } 
      } 

     }); 

     Thread t2 = new Thread(new Runnable(){ 
      public void run(){ 
       for(int i = 0; i<=100;i++){ 
        System.out.println(" Name :"+Thread.currentThread().getName()); 
       } 
      } 

     }); 
     t1.start(); 
     t1.join(); 
     t2.start(); 

     Thread t3 = new Thread(new Runnable(){ 
      public void run(){ 
       for(int i = 0; i<=100;i++){ 
        System.out.println(" Name :"+Thread.currentThread().getName()); 
       } 
      } 

     }); 

     t3.start();  

    } 
} 

謝謝。

+3

您可以在文檔中的答案[主題#join()方法(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html #join--) – matoni

+0

您是否考慮過查閱文檔? – EJP

+2

你認爲「等待這個線程死亡」是什麼意思? – shmosel

回答

-1

join()是一個阻塞調用,無論何時在線程上調用連接,調用線程都會等待該線程完成。這裏主線程將等待/阻塞,直到t1線程完成。

參見:http://www.journaldev.com/1024/java-thread-join-example

+2

唯一需要的鏈接是[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join--)。不是你的垃圾郵件第三方網站。 – EJP