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

来源:2-5 Java线程-隋唐演义实战开发---关键先生

艾米丽宏

2018-05-29 21:12

 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回答

  • 慕粉1473724057
    2018-06-30 12:06:37
    已采纳

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

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

    艾米丽宏

    非常感谢!

    2018-07-01 10:10:45

    共 1 条回复 >

  • qq_慕圣2566072
    2019-06-20 11:15:16

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

  • qq__粉色的小海星_0
    2018-05-30 09:04:09

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

    qq_慕圣2... 回复艾米丽宏

    是随机的,主线程中用了sleep,休眠时间结束就执行sleep后面的语句

    2019-06-20 11:10:13

    共 4 条回复 >

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题