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

大佬们,请问下如果在停战结束命令发出前(给KeepRunning赋为false前),某个军队已经运行完了5次循环,那么在下达停战命令后,这个军队是一次不运行还是再重新运行一次完整的5次循环呢?

如果在停战结束命令发出前(给KeepRunning赋为false前),某个军队已经运行完了5次循环,那么在下达停战命令后,这个军队是一次不运行 Or 再重新运行一次完整的5次循环呢?

下面截图中农民军在停战命令发出前,已经运行完了一个完整的循环,为什么还会运行一个完整的循环呢?

老师上课说的再重新运行0到5次循环是不是不准确?


https://img1.sycdn.imooc.com//5c9d7b190001de7f09720640.jpg

正在回答

3 回答


正常应该是这种结果吧,最好贴上你的代码分析一下


http://img1.sycdn.imooc.com//5eeb14f500016c7506410589.jpg

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

给你个老师的代码,复制过去:

Stage.java:

package com.imooc.concurrent.base;

/**

 * 隋唐演义大戏舞台

 */

public class Stage extends Thread {

public void run(){

System.out.println("欢迎观看隋唐演义");

//让观众们安静片刻,等待大戏上演

try {

Thread.sleep(5000);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

System.out.println("大幕徐徐拉开");

try {

Thread.sleep(5000);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

System.out.println("话说隋朝末年,隋军与农民起义军杀得昏天黑地...");

ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();

ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();

//使用Runnable接口创建线程

Thread  armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋军");

Thread  armyOfRevolt = new Thread(armyTaskOfRevolt,"农民起义军");

//启动线程,让军队开始作战

armyOfSuiDynasty.start();

armyOfRevolt.start();

//舞台线程休眠,大家专心观看军队厮杀

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("正当双方激战正酣,半路杀出了个程咬金");

Thread  mrCheng = new KeyPersonThread();

mrCheng.setName("程咬金");

System.out.println("程咬金的理想就是结束战争,使百姓安居乐业!");

//停止军队作战

//停止线程的方法

armyTaskOfSuiDynasty.keepRunning = false;

armyTaskOfRevolt.keepRunning = false;

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

/*

* 历史大戏留给关键人物

*/

mrCheng.start();

//万众瞩目,所有线程等待程先生完成历史使命

try {

mrCheng.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("战争结束,人民安居乐业,程先生实现了积极的人生梦想,为人民作出了贡献!");

System.out.println("谢谢观看隋唐演义,再见!");

}

public static void main(String[] args) {

new Stage().start();

}

}


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

你应该没写Thread.yieId()方法,老师讲的没有错误

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

宝慕林7443164

还有可能你的军队交战线程结束命令发出后,线程休眠时间短,不能切实完成结束命命令,看不到你的代码,纯属个人理解
2019-04-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大佬们,请问下如果在停战结束命令发出前(给KeepRunning赋为false前),某个军队已经运行完了5次循环,那么在下达停战命令后,这个军队是一次不运行还是再重新运行一次完整的5次循环呢?

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