//军队线程
//模拟作战双方的行为
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()+"结束了战斗!"); } }
package com.wistron.swpc.ecs.util;

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()+"结束了战斗!");
}
}
package com.wistron.swpc.ecs.util;

/**
* 隋唐演义大戏舞台
*/
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 armyOfRevolt = new Thread(armyTaskOfRevolt,"农民起义军"); //启动线程,让军队开始作战
armyOfSuiDynasty.start();
armyOfRevolt.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(); } }

以上通过

ArmyRunnable 类中的keepRunning来判断是否终止线程,keepRunning使用volatile标识符,关于volatile标识符请参考
http://www.importnew.com/24082.html

最新文章

  1. 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格
  2. xdebug所有相关方法函数详解(中文翻译版)
  3. C# 解析html —— 将html转为XHTML,然后利用Xml解析
  4. JavaScript中的this关键字
  5. jetty加载spring-context容器源码分析
  6. js设置与获取Cookie
  7. samba环境搭建
  8. 禁止鼠标多次点击选中div中的文字
  9. Android DES AES MD5加密
  10. js Get中文乱码 转码
  11. 功率W与dBm的对照表及关系(转)
  12. ACM Robot Motion
  13. Docker 的点点滴滴
  14. CF1037E. Trips
  15. TMS320DM642开发之Bug1-Memory map error:READ access by cpu to address 0x1b3f018(Device Config Space)which is not supported in simulator
  16. windows下查看特定端口被什么程序占用
  17. php中call_user_func 与 call_user_func_array的使用
  18. bzoj 3489 A simple rmq problem - 线段树
  19. 通过selenium控制浏览器滚动条
  20. Python并发编程-Memcached (分布式内存对象缓存系统)

热门文章

  1. 一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
  2. go 语言优势
  3. nyoj 307
  4. python编码小记
  5. Grails用CONSOLE测试,比写集成测试还快
  6. MFS搭建
  7. bootstrap-table设置height后表头与内容无法对齐的问题
  8. .NET Web API - 去掉讨厌的$id并且强制返回json格式
  9. java读取中文分词工具(一)
  10. Android学习之6.0系统执行时权限设置