问答详情
源自:2-5 Java线程-隋唐演义实战开发---关键先生

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;

提问者:艾米丽宏 2018-05-29 21:12

个回答

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

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

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

  • 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,意味着结束