黑马程序员技术交流社区

标题: 主函数都已经over了 为什么其他的线程还要打印一次? [打印本页]

作者: 8047107    时间: 2013-6-25 23:38
标题: 主函数都已经over了 为什么其他的线程还要打印一次?
本帖最后由 孙百鑫 于 2013-6-27 07:52 编辑
  1. class StopThread implements Runnable
  2. {
  3.         private boolean flag =true;
  4.         public  void run()
  5.         {
  6.                 while(flag)
  7.                 {
  8.                         
  9.                         System.out.println(Thread.currentThread().getName()+"....run");
  10.                 }
  11.         }
  12.         public void changeFlag()
  13.         {
  14.                 flag = false;
  15.         }
  16. }
  17. class  Demo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 StopThread st = new StopThread();               
  22.                 Thread t1 = new Thread(st);
  23.                 Thread t2 = new Thread(st);
  24.                 t1.start();
  25.                 t2.start();
  26.                 int num = 0;
  27.                 while(true)
  28.                 {
  29.                         if(num++ == 10)
  30.                         {
  31.                                 st.changeFlag();
  32.                                 break;
  33.                         }
  34.                         System.out.println(Thread.currentThread().getName()+"......."+num);
  35.                 }
  36.                 System.out.println("over");
  37.         }
  38. }
复制代码
打印结果是
Thread-1....run
Thread-1....run
main.......6
main.......7
main.......8
main.......9
main.......10
over
Thread-1....run
Thread-0....run
请按任意键继续. . .
不是打印over都结束了吗?为什么每次运行最后都有他们两条语句打印?
作者: 张承富    时间: 2013-6-25 23:57
你的这个结束,并不是线程真正的结束,在main的线程打印over的时候,t1,t2仍在抢占线程,如果正好抢到了,就打印出来了
如果想避免这种情况,你就要用Thread.sleep(1000);
这样应该就没问题了
作者: 8047107    时间: 2013-6-25 23:59
张承富 发表于 2013-6-25 23:57
你的这个结束,并不是线程真正的结束,在main的线程打印over的时候,t1,t2仍在抢占线程,如果正好抢到了, ...

关键是每次都执行啊.不会每次都能抢到的把?
作者: 张承富    时间: 2013-6-26 00:10
还真不是每次
你把10换成20试试
作者: 王靖远    时间: 2013-6-26 01:20
没加锁的原因吧。
作者: 郭伟杰    时间: 2013-6-26 12:37
主线程over    别的没over啊     又不是后台线程会随着主线程结束而结束
作者: 孙百鑫    时间: 2013-6-27 07:52
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生




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