java多线程-军队战争

 1 package cn.test.muke;
 2 
 3 
 4 //军队线程
 5 //模拟作战双方的行为
 6 public class ArmyRunnable implements Runnable{
 7     
 8     // volatile保证了线程可以正确的读取其他线程写入的值
 9     // 可见性 refer JMM,happens-before原则
10     volatile boolean keepRunning = true;
11 
12     @Override
13     public void run() {
14     
15         while(keepRunning) {
16             // 发动5连击
17             for(int i = 0;i < 5;i++) {
18                 System.out.println(Thread.currentThread().getName()+ "进攻对方["+i+"]");
19                 // 使得当前进程可以让出处理器,下一次是谁不一定
20                 Thread.yield();
21             }
22             
23         }
24         
25         System.out.println(Thread.currentThread()+"结束了战斗");
26         
27     }
28     
29 }
 1 package cn.test.muke;
 2 /**
 3  * 隋唐演义大戏舞台
 4  * @author Tony Fan
 5  *
 6  */
 7 public class Stage extends Thread {
 8 
 9     public void run() {
10         
11         // 隋朝军队
12         ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
13         // 农民起义军
14         ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();
15         
16         //使用Runnable接口创建线程
17         Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋军");
18         Thread armyOfRevolt = new Thread(armyTaskOfRevolt,"农民起义军");
19         
20         //启动线程,让军队开始作战
21         armyOfSuiDynasty.start();
22         armyOfRevolt.start();
23         
24         
25         //舞台线程休眠,大家专心观看均对厮杀
26         try {
27             Thread.sleep(50);
28         } catch (InterruptedException e) {
29             // TODO Auto-generated catch block
30             e.printStackTrace();
31         }
32         
33         armyTaskOfSuiDynasty.keepRunning = false;
34         armyTaskOfRevolt.keepRunning = false;
35         
36         try {
37             armyOfRevolt.join();
38         } catch (InterruptedException e) {
39             // TODO Auto-generated catch block
40             e.printStackTrace();
41         }
42     }
43     
44     public static void main(String[] args) {
45         // TODO Auto-generated method stub
46         new Stage().start();
47 
48     }
49 
50 }
原文地址:https://www.cnblogs.com/fxw-learning/p/12331789.html