• 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 }
  • 相关阅读:
    delphi 焦点定位
    delphi cxgrid 添加分页
    推动力
    python enumerate 函数用法
    Python pass语句作用与用法
    Python 元组知识点
    python 练习多级菜单思路
    一点练习题
    优化mysql服务器
    对自己的忠告
  • 原文地址:https://www.cnblogs.com/fxw-learning/p/12331789.html
Copyright © 2020-2023  润新知