黑马程序员技术交流社区
标题:
主函数都已经over了 为什么其他的线程还要打印一次?
[打印本页]
作者:
8047107
时间:
2013-6-25 23:38
标题:
主函数都已经over了 为什么其他的线程还要打印一次?
本帖最后由 孙百鑫 于 2013-6-27 07:52 编辑
class StopThread implements Runnable
{
private boolean flag =true;
public void run()
{
while(flag)
{
System.out.println(Thread.currentThread().getName()+"....run");
}
}
public void changeFlag()
{
flag = false;
}
}
class Demo
{
public static void main(String[] args)
{
StopThread st = new StopThread();
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);
t1.start();
t2.start();
int num = 0;
while(true)
{
if(num++ == 10)
{
st.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"......."+num);
}
System.out.println("over");
}
}
复制代码
打印结果是
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