首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在尝试使用join join()方法

正在尝试使用join join()方法
EN

Stack Overflow用户
提问于 2013-12-12 01:01:25
回答 4查看 105关注 0票数 2

我有以下代码

代码语言:javascript
复制
class Multi extends Thread{  

 public void run(){  
  for(int i=1;i<=3;i++){  

  System.out.println(i + ": "+Thread.currentThread().getName());  
  }  
 }  
public static void main(String args[]){  
 Multi t1=new Multi();
 t1.setName("First Thread");
 Multi t2=new Multi();
 t2.setName("Second Thread");
 Multi t3=new Multi();  
 t3.setName("Third Thread");
 t1.start();  
 t2.start();  
 try{  
  t1.join();
  t2.join();
 }catch(Exception e){System.out.println(e);}  

 t3.start();  
 }  
}

**

每次运行以下命令时,输出都会有所不同:

代码语言:javascript
复制
1st time Output

1: Second Thread
2: Second Thread
3: Second Thread
1: First Thread
2: First Thread
3: First Thread
1: Third Thread
2: Third Thread
3: Third Thread


=============================================
2nd time Output

1: First Thread
2: First Thread
3: First Thread
1: Second Thread
2: Second Thread
3: Second Thread
1: Third Thread
2: Third Thread
3: Third Thread


*************************************************

既然t2.join()是在t1.join()之后调用的,那么第一个输出是怎么来的?t2不应该等待t1执行吗?

如果可能的话,请用更多的代码片段示例帮助我理解join()方法的行为

EN

回答 4

Stack Overflow用户

发布于 2013-12-12 01:05:17

在线程t完成执行之前,t.join()会阻塞当前线程(示例中的主线程)。它不会阻塞任何其他线程,也不会阻止任何其他线程运行。

您的示例启动t1和t2。所以t1和t2是并行运行的。并且主线程会阻塞,直到t1完成。一旦t1完成,它就会阻塞,直到t2完成。在t1之前,t2很可能已经完成了执行。在这种情况下,t2.join()将立即返回。

票数 7
EN

Stack Overflow用户

发布于 2013-12-12 01:05:31

join method不会影响任何当前正在执行的Thread的执行顺序,它所做的一切都是让当前线程等待,直到指定的Thread结束。

票数 2
EN

Stack Overflow用户

发布于 2013-12-12 01:06:18

让线程t2等待t1完成..您需要在t2run()方法中编写t1.join()

在本例中,主线程将等待t1和t2完成,然后启动线程t3。从输出中可以明显看出,t3是在t1和t2完成之后启动的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20525328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档