黑马程序员技术交流社区
标题:
关于多线程和System.exit()的问题
[打印本页]
作者:
广驰
时间:
2012-8-25 16:31
标题:
关于多线程和System.exit()的问题
class Demo extends Thread
{
private String name;
Demo(String name)
{
this.name = name;
}
public void run()
{
for(int x= 0;x<10;x++)
System.out.println(name+"run"+x);
System.exit(0);
}
}
class Test
{
public static void main(String[] arges)
{
Demo d1 = new Demo("1");
d1.start();
Demo d2 = new Demo("2");
d2.start();
Demo d3 = new Demo("3");
d3.start();
Demo d4 = new Demo("4");
d4.start();
}
}
复制代码
System.exit(0)执行之后不是应该整个程序都停止了么,可是为什么结果确实一个线程结束后,另一个线程还要循环几次才结束呢,
1run0
2run0
2run1
2run2
2run3
2run4
2run5
2run6
2run7
2run8
2run9
1run1
1run2
1run3
1run4
1run5
这个是其中一次的运行结果,按说应该执行到2run9程序就结束了,为什么后面还执行到了1run5呢
麻烦又哪位知道了指教一下!!谢谢
作者:
李敬
时间:
2012-8-25 16:43
本帖最后由 李敬 于 2012-8-25 16:45 编辑
执行完2run9也不一定就一定先执行System.exit(0),可以执行其他的线程,然后又回到本线去执行System.exit(0)的
作者:
广驰
时间:
2012-8-25 16:53
李敬 发表于 2012-8-25 16:43
执行完2run9也不一定就一定先执行System.exit(0),可以执行其他的线程,然后又回到本线去执行System.exit(0) ...
呃,一时没想到,反而纠结了,没想到确实很简单
作者:
刘源
时间:
2012-8-25 16:54
因为你是多线程运行,所以你不能保证,那个线程执行到System.exit(0)。他完全有可能执行下这个线程之后就换下个线程了。
如果你只是想验证System.exit(0)之后,还有没有其他线程在执行,那么你只需要将他们要执行的代码同步就OK了。
这样你虽然开启了4个线程,但肯定是一个线程执行完之后,才能执行下一个线程,但是,这个线程会执行到System.exit(0),那么程序就停掉了,下一个线程就不会执行。
结果就是,每一次都会打印一个线程,但不知道是哪个线程优先抢到资源。
作者:
广驰
时间:
2012-8-25 17:01
已解决!!谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2