艾米丽宏
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;
我的理解是这样的 既然是多线程,多天线程同时进行,在农民和隋军的那两条线程进行的同时,就是main下的主线程也在运行(Stage),它在执行农民和隋军的线程的同时,也在一直往下运行,运行到armyTaskOfSuiDynasty.keepRunning=false;
armyTaskOfRevolt.keepRunning=false;
农民和隋军的线程自然也就停止了。
在主线程中加入sleep让军队线程获得时间资源,进行打斗。军队线程中的yield使双方的打斗随机进行,所以次数不确定。因为volatile的存在所以其他的线程可以修改runnable的值,这里的其他线程值主线程(stage),即在sleep休眠时间结束后执行armyTaskOfSuiDynasty.keepRunnable = false; armyTaskOfRevolt.keepRunnable = false;
使得军队的对战结束
这个我理解应该是在循环里打够了多少回合,跳出循环直接给 armyTaskOfSuiDynasty.keepRunning和 armyTaskOfRevolt.keepRunning赋值false,意味着结束
深入浅出Java多线程
186088 学习 · 464 问题
相似问题