为什么我的调用军队方法是成功的但是不执行循环里面的内容?

来源:2-4 Java线程-隋唐演义实战开发---军队

qq_筑城以北_04274162

2017-05-02 16:39

package com.imooc.war;

//        军队

public class Host implements Runnable {


// volatile  关键字保证线程可以正确读取其他线程传入的值

volatile boolean mm=true;


@Override

public void run() {

while(mm){

for(int i=1;i<=20;i++){

if(Thread.currentThread().getName().equals("毛毛"))

System.out.println(Thread.currentThread().getName()+"第"+i+"次  踩脚");

if(Thread.currentThread().getName().equals("蛋蛋"))

System.out.println(Thread.currentThread().getName()+"第"+i+"次  打屁股");

// 让出处理器时间

Thread.yield();

// if(i==20){

// mm=false;

// }

}

}

System.out.println(Thread.currentThread().getName()+"   结束!");

}

}

------------------

package com.imooc.war;


//           作战地点

public class stage implements Runnable {


@Override

public void run() {

Host mm=new Host();

Host dd=new Host();

Thread mmt=new Thread(mm, "毛毛");

Thread ddt=new Thread(dd, "蛋蛋");

try {

Thread.sleep(500);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

mmt.start();

ddt.start();

mm.mm=false;

dd.mm=false;

try {

mmt.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

}


public static void main(String[] args) {

new stage().run();

}

}


-------------

输出 仅有:

蛋蛋   结束!

毛毛   结束!


写回答 关注

2回答

  • Mad_Man_
    2017-05-14 10:38:47

    mmt.start();

    ddt.start();

    try {

    Thread.sleep(5000);

    } catch (InterruptedException e1) {

    // TODO Auto-generated catch block

    e1.printStackTrace();

    }

    mm.mm=false;

    dd.mm=false;

    这样就好了,原先可能是你没有让Stage线程休眠,然后程序运行到mmt.start(); ddt.start();后就接着运行mm.mm=false; dd.mm=false;了  所以出现那样的情况,,,,,,,个人见解,,本人 也是新手,,所以建议只供参考



  • qq_筑城以北_04274162
    2017-05-02 16:50:17

    粘贴有误

    public class stage extends Thread 


    stage s=new stage();

    s.start();


    qq_筑城以...

    输出结果无误

    2017-05-02 16:51:04

    共 1 条回复 >

深入浅出Java多线程

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

186071 学习 · 498 问题

查看课程

相似问题