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();
}
}
-------------
输出 仅有:
蛋蛋 结束!
毛毛 结束!
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;了 所以出现那样的情况,,,,,,,个人见解,,本人 也是新手,,所以建议只供参考
粘贴有误
public class stage extends Thread
stage s=new stage();
s.start();
深入浅出Java多线程
186071 学习 · 498 问题
相似问题