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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 广驰 中级黑马   /  2012-8-25 16:31  /  3242 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo extends Thread
  2. {
  3.         private String name;
  4.         Demo(String name)
  5.         {
  6.                 this.name = name;
  7.         }
  8.         public void run()
  9.         {
  10.                 for(int x= 0;x<10;x++)
  11.                 System.out.println(name+"run"+x);
  12.                 System.exit(0);
  13.         }
  14. }

  15. class Test
  16. {
  17.         public static void main(String[] arges)
  18.         {
  19.                 Demo d1 = new Demo("1");
  20.                 d1.start();
  21.                 Demo d2 = new Demo("2");
  22.                 d2.start();
  23.                 Demo d3 = new Demo("3");
  24.                 d3.start();
  25.                 Demo d4 = new Demo("4");
  26.                 d4.start();
  27.         }
  28. }
复制代码
System.exit(0)执行之后不是应该整个程序都停止了么,可是为什么结果确实一个线程结束后,另一个线程还要循环几次才结束呢,
1run0
2run0
2run1
2run2
2run3
2run4
2run5
2run6
2run7
2run8
2run9
1run1
1run2
1run3
1run4
1run5

这个是其中一次的运行结果,按说应该执行到2run9程序就结束了,为什么后面还执行到了1run5呢
麻烦又哪位知道了指教一下!!谢谢

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 李敬 于 2012-8-25 16:45 编辑

执行完2run9也不一定就一定先执行System.exit(0),可以执行其他的线程,然后又回到本线去执行System.exit(0)的

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
李敬 发表于 2012-8-25 16:43
执行完2run9也不一定就一定先执行System.exit(0),可以执行其他的线程,然后又回到本线去执行System.exit(0) ...

呃,一时没想到,反而纠结了,没想到确实很简单
回复 使用道具 举报
因为你是多线程运行,所以你不能保证,那个线程执行到System.exit(0)。他完全有可能执行下这个线程之后就换下个线程了。
如果你只是想验证System.exit(0)之后,还有没有其他线程在执行,那么你只需要将他们要执行的代码同步就OK了。
这样你虽然开启了4个线程,但肯定是一个线程执行完之后,才能执行下一个线程,但是,这个线程会执行到System.exit(0),那么程序就停掉了,下一个线程就不会执行。
结果就是,每一次都会打印一个线程,但不知道是哪个线程优先抢到资源。
回复 使用道具 举报
已解决!!谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马