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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 寻找人生目标 中级黑马   /  2014-5-3 23:07  /  1184 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 寻找人生目标 于 2014-5-4 19:25 编辑

上课的时候老师没说清楚
  1. public class ThreadDemo5 implements Runnable {

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

  3.                 ThreadDemo5 td = new ThreadDemo5();

  4.                 Thread th1 = new Thread(td, "a");
  5.                 Thread th2 = new Thread(td, "b");

  6.                 th1.join(); // 让当前线程等待,让其它线程执行,其它线程执行完成后,在执行线程。

  7.                 th1.start();
  8.                 th2.start();

  9.         }

  10.         public void run() {
  11.                 for (int i = 0; i < 50; i++) {
  12.                         System.out.println(Thread.currentThread().getName() + i);
  13.                 }

  14.         }
  15. }
复制代码



输出的答案是
a0
b0
b1
b2
b3
b4
b5
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a13
a14
a15
a16
a17
a18
a19
a20
b6
a21
b7
a22
b8
a23
b9
a24
b10
a25
b11
a26
b12
a27
b13
a28
b14
a29
b15
a30
b16
a31
b17
a32
b18
a33
b19
a34
b20
a35
b21
a36
b22
a37
b23
a38
b24
a39
b25
a40
b26
a41
b27
a42
b28
a43
b29
a44
b30
a45
b31
a46
b32
a47
b33
a48
b34
a49
b35
b36
b37
b38
b39
b40
b41
b42
b43
b44
b45
b46
b47
b48
b49
没明白。。。

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
在执行t.join()方法时,如果t线程还没有启动,即还没有执行t.start()方法是,调用t.join()方法时是不会起任何作用的,也不会抛出异常,而是继续向下顺序执行。楼主代码中语句th1.join(没有起作用,主线程向下执行启动了th1和th2线程,就输出了那样结果。

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

回复 使用道具 举报
Lin0411 发表于 2014-5-3 23:29
在执行t.join()方法时,如果t线程还没有启动,即还没有执行t.start()方法是,调用t.join()方法时是不会起任 ...

那你意思是说 如果一个线程启动了即调用它的join方法 而同时另一个线程也启动了  但是之前那线程调用了join方法所以必须之前的线程执行完  另一个线程才能执行,另一个线程期间是等待状态?        因为调用了join方法  所以不会出现执行中时间片的转让等问题麽   
回复 使用道具 举报
Lin0411 发表于 2014-5-3 23:29
在执行t.join()方法时,如果t线程还没有启动,即还没有执行t.start()方法是,调用t.join()方法时是不会起任 ...
  1. th1.join(); // 让当前线程等待,让其它线程执行,其它线程执行完成后,在执行线程。
复制代码



这句话咋个意思  我迷糊了  到底是哪个线程等待呢
回复 使用道具 举报
寻找人生目标 发表于 2014-5-3 23:36
这句话咋个意思  我迷糊了  到底是哪个线程等待呢

应该是让其他线程等待,直至th1执行完再执行其他线程,前提是th1必须先启动了。
回复 使用道具 举报
Lin0411 发表于 2014-5-3 23:57
应该是让其他线程等待,直至th1执行完再执行其他线程,前提是th1必须先启动了。 ...

:)哦了  有点明白了  谢了 大神
回复 使用道具 举报
学习学习
回复 使用道具 举报
路过瞅瞅~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马