为了账号安全,请及时绑定邮箱和手机立即绑定

armyTaskOfSuiDynasty.keepRunning=false;与armyTaskOfRevolt.keepRunning=false;什么以时候执行呢?

 armyTaskOfSuiDynasty.keepRunning=false;与armyTaskOfRevolt.keepRunning=false;什么以时候执行呢?没有写到军队线程中的while循环内,怎么会被调用到呢?

==========================================

//启动线程,让军队开始作战
        armyOfSuiDynasty.start();
        armyOfRevolt.start();
        
        //舞台线程休眠50毫秒,大家专心观看军队厮杀
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        armyTaskOfSuiDynasty.keepRunning=false;
        armyTaskOfRevolt.keepRunning=false;

正在回答

3 回答

我的理解是这样的 既然是多线程,多天线程同时进行,在农民和隋军的那两条线程进行的同时,就是main下的主线程也在运行(Stage),它在执行农民和隋军的线程的同时,也在一直往下运行,运行到armyTaskOfSuiDynasty.keepRunning=false;
 armyTaskOfRevolt.keepRunning=false;

农民和隋军的线程自然也就停止了。

1 回复 有任何疑惑可以回复我~
#1

艾米丽宏 提问者

非常感谢!
2018-07-01 回复 有任何疑惑可以回复我~

在主线程中加入sleep让军队线程获得时间资源,进行打斗。军队线程中的yield使双方的打斗随机进行,所以次数不确定。因为volatile的存在所以其他的线程可以修改runnable的值,这里的其他线程值主线程(stage),即在sleep休眠时间结束后执行armyTaskOfSuiDynasty.keepRunnable = false; armyTaskOfRevolt.keepRunnable = false;
使得军队的对战结束

0 回复 有任何疑惑可以回复我~

这个我理解应该是在循环里打够了多少回合,跳出循环直接给 armyTaskOfSuiDynasty.keepRunning和  armyTaskOfRevolt.keepRunning赋值false,意味着结束

0 回复 有任何疑惑可以回复我~
#1

艾米丽宏 提问者

是具体多少回合呢,还是随机的呢?
2018-05-30 回复 有任何疑惑可以回复我~
#2

我梦寐以求是真爱与自由 回复 艾米丽宏 提问者

回合的多少取决于Thread.sleep()里的时间,主线程stage在执行到休眠的时候它是停下来的,所以keepRunning依旧是true,这就保证了armyTaskOfSuiDynasty.satrt(), armyTaskOfRevolt.start()并没有停止。你休眠的时间越长,战斗回合越多
2018-08-28 回复 有任何疑惑可以回复我~
#3

Silent_Walke

我觉得应该是时刻监控的,起码是经常监控的,并且关键字volatile是活跃的意思,所以设为false之后很快就能停下,
2018-10-08 回复 有任何疑惑可以回复我~
#4

qq_慕圣2566072 回复 艾米丽宏 提问者

是随机的,主线程中用了sleep,休眠时间结束就执行sleep后面的语句
2019-06-20 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

armyTaskOfSuiDynasty.keepRunning=false;与armyTaskOfRevolt.keepRunning=false;什么以时候执行呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信