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 }