//军队线程
//模拟作战双方的行为
public class ArmyRunnable implements Runnable {
// volatile保证了线程可以正确的读取其他线程写入的值
// 可见性 ref JMM, happens-before原则
volatile boolean keepRunning = true;
@Override
public void run() {
while (keepRunning) {
// 发动5连击
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]");
// 让出了处理器时间,下次该谁进攻还不一定呢!
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName() + "结束了战斗!");
}
}
====================================================================
//关键人物线程
public class KeyPersonThread extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName() + "开始了战斗!");
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "左突右杀,攻击隋军...");
}
System.out.println(Thread.currentThread().getName() + "结束了战斗!");
}
}
============================================================
/**
* 隋唐演义大戏舞台
*/
public class Stage extends Thread {
public void run() {
System.out.println("欢迎观看隋唐演义");
// 让观众们安静片刻,等待大戏上演
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("大幕徐徐拉开");
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("话说隋朝末年,隋军与农民起义军杀得昏天黑地...");
ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();
// 使用Runnable接口创建线程
Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty, "隋军");
Thread armyOfRevort = new Thread(armyTaskOfRevolt, "农民起义军");
// 启动线程,让军队开始作战
armyOfSuiDynasty.start();
armyOfRevort.start();
// 舞台线程休眠,大家专心观看军队厮杀
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("正当双方激战正酣,半路杀出了个程咬金");
Thread mrCheng = new KeyPersonThread();
mrCheng.setName("程咬金");
System.out.println("程咬金的理想就是结束战争,使百姓安居乐业!");
// 停止军队作战
// 停止线程的方法
armyTaskOfSuiDynasty.keepRunning = false;
armyTaskOfRevolt.keepRunning = false;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* 历史大戏留给关键人物
*/
mrCheng.start();
// 万众瞩目,所有线程等待程先生完成历史使命
try {
mrCheng.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("战争结束,人民安居乐业,程先生实现了积极的人生梦想,为人民作出了贡献!");
System.out.println("谢谢观看隋唐演义,再见!");
}
public static void main(String[] args) {
new Stage().start();
}
}
=============================
运行结果
欢迎观看隋唐演义
大幕徐徐拉开
话说隋朝末年,隋军与农民起义军杀得昏天黑地...
农民起义军进攻对方[0]
隋军进攻对方[0]
农民起义军进攻对方[1]
隋军进攻对方[1]
农民起义军进攻对方[2]
隋军进攻对方[2]
隋军进攻对方[3]
隋军进攻对方[4]
隋军进攻对方[0]
农民起义军进攻对方[3]
隋军进攻对方[1]
农民起义军进攻对方[4]
隋军进攻对方[2]
农民起义军进攻对方[0]
隋军进攻对方[3]
农民起义军进攻对方[1]
隋军进攻对方[4]
农民起义军进攻对方[2]
。。。。。。。
。。。。。。。
农民起义军进攻对方[4]
隋军进攻对方[3]
农民起义军进攻对方[0]
隋军进攻对方[4]
农民起义军进攻对方[1]
隋军进攻对方[0]
农民起义军进攻对方[2]
隋军进攻对方[1]
农民起义军进攻对方[3]
正当双方激战正酣,半路杀出了个程咬金
程咬金的理想就是结束战争,使百姓安居乐业!
农民起义军进攻对方[4]
农民起义军结束了战斗!
隋军进攻对方[2]
隋军进攻对方[3]
隋军进攻对方[4]
隋军结束了战斗!
程咬金开始了战斗!
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金左突右杀,攻击隋军...
程咬金结束了战斗!
战争结束,人民安居乐业,程先生实现了积极的人生梦想,为人民作出了贡献!
谢谢观看隋唐演义,再见!