黑马程序员技术交流社区
标题:
关于停止线程的小问题
[打印本页]
作者:
半夜雨半夜雨
时间:
2013-11-13 13:53
标题:
关于停止线程的小问题
本帖最后由 半夜雨半夜雨 于 2013-11-13 18:33 编辑
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 StopThreadDemo
{
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++ == 60)
{
st.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"......."+num);
}
System.out.println("over");
}
}
复制代码
如上代码,谁能和我说说代码的执行顺序,这个有点混啊
作者:
qw无语
时间:
2013-11-13 15:03
从主线程开始,
2个分线程开启,但不一定获得执行权(就是抢CPU资源,我也是新手)
这个时候需要看主线程和分线程谁获得了执行权,
如果主线程一直获得执行权一直运行到了st.changeFlag();改变了标记
这个时候分线程直接判断标记为false,还没有打印过,就没有打印机会了。
如果分线程一直拿到执行权,还可以在主线程未运行到st.changeFlag();会一直运行。
直到别的线程拿到执行权才可能发生任意情况。因为每个线程都可能拿到执行权,也可以在运行时被抢走执行权,有很多种可能。所以有很多种结果。
作者:
半夜雨半夜雨
时间:
2013-11-13 18:33
qw无语 发表于 2013-11-13 15:03
从主线程开始,
2个分线程开启,但不一定获得执行权(就是抢CPU资源,我也是新手)
这个时候需要看主线程和分 ...
:lol谢了,看了几遍终于弄清楚了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2