黑马程序员技术交流社区

标题: 线程输出的结果问题 同一段代码为什么两个结果 [打印本页]

作者: 何超    时间: 2013-11-9 19:50
标题: 线程输出的结果问题 同一段代码为什么两个结果
本帖最后由 何超 于 2013-11-10 21:40 编辑
  1. class StopThread implements Runnable
  2. {
  3.         private boolean flag=true;
  4.         public void run()
  5.         {
  6.                 while(flag)
  7.                 {
  8.                         System.out.println(Thread.currentThread().getName()+"...run");
  9.                 }
  10.         }
  11.         public void changeFlag()
  12.         {
  13.                 flag=false;
  14.         }
  15. }
  16. class StopThreadDemo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 StopThread st=new StopThread();

  21.                 Thread t1=new Thread(st);
  22.                 Thread t2=new Thread(st);

  23.                 t1.start();
  24.                 t2.start();

  25.                 int num=0;

  26.                 while(true)
  27.                 {
  28.                         if(num++==60)
  29.                         {
  30.                                 st.changeFlag();
  31.                                 break;
  32.                         }
  33.                         System.out.println(Thread.currentThread().getName()+"....."+num);
  34.                 }
  35.         }
  36. }
复制代码
第一个图片是我的运行结果   第二个是毕老师的  求告知为什么毕老师的结果是这样   怎么想也想不通  就这么点代码  我反复看了好多遍跟毕老师的一模一样啊

作者: hurryup    时间: 2013-11-9 21:05
那个输出语句被注释了吧?
作者: 何超    时间: 2013-11-9 21:21
hurryup 发表于 2013-11-9 21:05
那个输出语句被注释了吧?

没注释掉  你看毕老师最后的结果有那两个线程···
作者: Clare0621    时间: 2013-11-10 10:18
你们结果一样的啊!毕老师的出现的结果是因为线程一和线程二,一直没抢到Cpu执行权导致的,所以直到主线程运行完,线程一和二才被CPU执行,执行一次后,由于主线程改变了flag值,导致线程被停止。
你的结果则是因为:线程一,线程二和主线程一直在抢CPU执行权,并且抢到了,所以和主线程交替运行。直到主线程改变flag值,停止线程。
作者: Clare0621    时间: 2013-11-10 10:28
这是我电脑的运行结果(像这种简单的多线程各个电脑运行结果是会有差别的,跟Cpu效率有关,估计是毕老师电脑性能差点吧,Cpu切换速度慢,才一直被主线程霸着不放手。。。哈哈):


作者: 黄炳期    时间: 2013-11-10 10:35
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
作者: 何超    时间: 2013-11-10 21:39
Clare0621 发表于 2013-11-10 10:28
这是我电脑的运行结果(像这种简单的多线程各个电脑运行结果是会有差别的,跟Cpu效率有关,估计是毕老师电 ...

:L我开始也是这样想···但是一想到主线程都运行完了其他两个线程才抢到执行权  这样的概率太低了···= = 所以才很纠结到底是什么原因···




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2