问答详情
源自:2-4 Java线程-隋唐演义实战开发---军队

为什么根本停不下来!!!

package com.imooc.play;


//军队线程,模拟作战双方的行为
public class Army implements Runnable {
 volatile boolean keepRunning = true;// volatile保证线程可以正确读取其他线程写入的该值


 public void run() {
  while (keepRunning = true) {
   for (int i = 0; i < 5; i++) {
    System.out.println(Thread.currentThread().getName() + "第"
      + (i + 1) + "次进攻对方");
    Thread.yield();// 让出处理器时间,下次该谁进攻还不一定
   }
  }
  System.out.println(Thread.currentThread().getName()+"战斗结束了!!");
 }
}

package com.imooc.play;


/**
 * 隋唐演义的大戏舞台
 *
 * @author cc
 *
 */


 public class Stage extends Thread {
 public void run() {
  Army army1 = new Army();
  Army army2 = new Army();
  // 使用runnable接口创建线程
  Thread army1Thread = new Thread(army1, "隋军");
  Thread army2Thread = new Thread(army2, "农民起义军");
  army1Thread.start();
  army2Thread.start();


  try {
   Thread.sleep(50);// 舞台线程休眠
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  army1.keepRunning = false;
  army2.keepRunning = false;
  try {
   army1Thread.join();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

 public static void main(String[] args) {
  new Stage().start();

 }

}


提问者:慕粉18523865484 2016-07-30 12:53

个回答

  • 迟煾
    2016-07-30 14:17:20
    已采纳

    Army类中while 循环的判断应该是==

  • 雪中_悍刀行
    2016-09-18 18:24:20

    炫迈口香糖,炫到爆,根本停不下来

  • SilenceDean
    2016-07-30 15:06:41

    Java里,=是赋值,==才是判断相对

    while(keepRunning=true)

    你这是直接定义keepRunning值true,所以进入无限循环了

  • 慕九州7431613
    2016-07-30 14:35:39

     public void run() {
      while (keepRunning = true) {
       for (int i = 0; i < 5; i++) {

    你把keepRunning 重新赋值为true了,while判断一直为真怎么可能停的下来,