问答详情
源自:3-2 Java线程停止正确的方法---设置退出旗标

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

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

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

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


https://img2.mukewang.com/5c9d7b190001de7f09720640.jpg

提问者:霸气小肆毛 2019-03-29 10:00

个回答

  • 未来一为我而来
    2020-06-18 15:21:49


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


    http://img1.mukewang.com/5eeb14f500016c7506410589.jpg

  • 归偃
    2020-01-19 12:29:36

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

    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();

    }

    }


  • 宝慕林7443164
    2019-04-16 23:08:53

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