2017-07-24 136 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