A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卜弦 中级黑马   /  2013-10-12 21:30  /  1581 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师视频里说当A线程执行到了B线程的join()方法时,A就会等待。等B线程都执行完,A才会执行。
视频中例子里面的程序是这样的:
t1.start();
t2.start();
t1.join();
老师说这种情况是主线程开启t1、t2后碰到了join,所以主线程释放执行权。另外两个线程运行。
请问,能不能是线程t2释放执行权给主线程和t1?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
你用join()方法意思就是让运行到这个方法的线程停止,让调用这个方法的线程执行完,本线程才能继续执行。如果你要让t2释放执行权给主线程和t1,那意思就是让t2线程运行到t1调用的join方法,所以你可以把t1传入给t2线程,在t2线程中调用t1的join()方法就可以了
代码实现:
  1. public class Test2 {
  2.         public static void main(String[] args) throws InterruptedException {
  3.                 T1 t1 = new T1();
  4.                 T2 t2 = new T2(t1);
  5.                 t1.start();
  6.                 t2.start();
  7.                 for(int x=0;x<100;x++){
  8.                         System.out.println("main---"+x);
  9.                 }
  10.         }
  11. }

  12. class T1 extends Thread{
  13.         @Override
  14.         public void run() {
  15.                 for(int x=0;x<100;x++){
  16.                         System.out.println("t1---"+x);
  17.                 }
  18.         }
  19. }
  20. class T2 extends Thread{
  21.         private T1 t1;
  22.         public T2(T1 t1){
  23.                 this.t1 = t1;
  24.         }
  25.         @Override
  26.         public void run() {
  27.                 try {
  28.                         t1.join();
  29.                 } catch (InterruptedException e) {
  30.                         // TODO Auto-generated catch block
  31.                         e.printStackTrace();
  32.                 }
  33.                 for(int x=0;x<100;x++){
  34.                         System.out.println("t2---"+x);
  35.                 }
  36.         }
  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-13 13:53:14
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
回复 使用道具 举报
To 金牌黑马 2013-10-14 09:25:35
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
Jam-l 发表于 2013-10-12 21:52
你用join()方法意思就是让运行到这个方法的线程停止,让调用这个方法的线程执行完,本线程才能继续执行。如 ...

是呢!!厉害呀~赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马