CyclicBarrier实现赛马游戏

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;class Horse implements Runnable{private static int counter = 0;private final int id = counter++;private int stries = 0;private static Random random = new Random(47);private static CyclicBarrier barrier;public Horse(CyclicBarrier cyclicBarrier) {barrier = cyclicBarrier;}public synchronized int getStries(){return this.stries;}@Overridepublic void run() {while (!Thread.interrupted()){synchronized (this){stries += random.nextInt(3);}try {barrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}}@Overridepublic String toString() {return "horse "+id+" ";}public String tracks(){StringBuilder s = new StringBuilder();for (int i=0 ; i<getStries() ; i++){s.append("*");}s.append(id);return s.toString();}
}
public class HorseRace {static final int FINISH_LINE = 75;private List<Horse> horseList = new ArrayList<Horse>();//创建线程池private ExecutorService exec = Executors.newCachedThreadPool();//栅栏private CyclicBarrier barrier;public HorseRace(int nHorse,final int pause) {barrier = new CyclicBarrier(nHorse, new Runnable() {@Overridepublic void run() {StringBuilder s = new StringBuilder();for (int i=0 ; i<FINISH_LINE ; i++){s.append("=");}System.out.println(s.toString());for (Horse h:horseList){System.out.println(h.toString()+h.tracks());}for (Horse h:horseList){if (h.getStries()>=FINISH_LINE){System.out.println("winner is"+h.toString());exec.shutdownNow();return;}}try {TimeUnit.MILLISECONDS.sleep(pause);} catch (InterruptedException e) {System.out.println("barrier-action sleep interrupted");}}});for (int i=0 ; i<nHorse ; i++){Horse horse = new Horse(barrier);horseList.add(horse);exec.execute(horse);}}public static void main(String[] args) {int nHorse = 7;int pause = 200;if (args.length >0){int n = new Integer(args[0]);nHorse = n > 0 ? n : nHorse;}if (args.length > 1){int p = new Integer(args[1]);pause = p > -1 ? p : pause;}new HorseRace(nHorse,pause);}
}

CyclicBarrier实现赛马游戏相关推荐

  1. 利用CyclicBarrier实现赛马游戏

    赛马游戏 前言 最近在看CountDownLatch和CyclicBarrier相关的锁知识,看到网上有通过CyclicBarrier特性实现一个赛马游戏,觉得很有意思,就把他搬运过来. 背景 多匹马 ...

  2. 从赛马游戏看CyclicBarrier,从斗地主看CountDownLatch

    CyclicBarrier是栅栏,效果就是让多个线程都执行到某个指定的点之后,再一起继续执行.与CountDownLatch有点类似,最大的区别是CyclicBarrier可以循环使用. 这里举例两个 ...

  3. 模特赛马java课程设计_Thinking in Java---Concurrent包下的新构件学习+赛马游戏仿真...

    Java5的java.util.concurrent包下引入了大量的用于解决并发问题的新类:相对于前面那些基础的线程同步和通信的方法,这些新类是一种更高层次上的抽象,使用起来还是比较容易的.这篇博客就 ...

  4. java赛马游戏,用JAVA语言实现赛马游戏

    用JAVA语言实现赛马游戏 用JAVA语言实现赛马游戏 在大二下半学期,学校举办了一场编程比赛.其中一个选题就是:用JAVA语言实现一个赛马游戏程序.此程序即为当时的参赛完成的程序. 程序界面风格在当 ...

  5. java赛马游戏_Java小程序赛马游戏实现过程详解

    这是当时做的一个小游戏,大概就是程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有 ...

  6. PEGAXY首创科幻类赛马游戏

    欢迎各位新老朋友,我们细说P2E(Play to Earn),为广大用户提供一个深入了解链游的平台.不定期的跟大家分享一些精品项目和最新链游方向,也欢迎大家关注我们.我们第二十期分享的是Polygon ...

  7. 炫酷赛马游戏:ZED RUN

    炫酷赛马游戏:ZED RUN 欢迎各位新老朋友,我们细说P2E(Play to Earn),为广大用户提供一个深入了解链游的平台.不定期的跟大家分享一些精品项目和最新链游方向,也欢迎大家关注我们. 我 ...

  8. 赛马游戏Horse Racing Winner即将启动

    赛马文化起源于英国,被称为国王的运动,是一种历史悠久高昂贵的爱好,是三大"贵族运动"之一.不仅仅参赛选手要盛装出席,练观众也是需要穿着正装.礼服观看.直到目前很多国家也还时常举办精 ...

  9. java赛马游戏_Java多线程赛马游戏

    [实例简介] 自己用java写的一个赛马的小游戏,用到了多线程和java swing ,分享给大家! [实例截图] [核心代码] cu0vk0 └── 赛马 └── smGame ├── bin │  ...

最新文章

  1. R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释多个iris数据样本的预测结果、使用LIME解释器进行模型预测结果解释
  2. “几何深度学习”受爱因斯坦启示:让AI摆脱平面看到更高的维度
  3. Redis的复制详解
  4. SpringBoot入门和配置
  5. 直播预告 | 亚马逊高级应用科学家熊元骏:人类行为理解研究进展
  6. 关于程序设计语言(贴吧里很有意思的一个帖子)
  7. C语言 ---文件读取
  8. token要加编码decode吗_彻底弄明白Base64 编码
  9. 发一个自己写的2440驱动1602的资料(电路+代码)
  10. python正则判断_Python 正则表达式
  11. springMVC:前端请求后台并传值
  12. 区块链搭建联盟链及控制台安装
  13. edm邮件直投_EDM邮件直投专家下载
  14. 2022年PC推荐-组装机及品牌机 2022年8月16日(持续更新)
  15. Spring Boot工程结构(推荐)
  16. js-最常用的js表单校验1
  17. Python、Selenium、火狐浏览器,简单的自动化实现
  18. 《可转债投资魔法书》:魔法般教会你可转债
  19. 只读存储器,并行存储器
  20. ITSS服务项目经理 IT服务工程师 培训 证书延续

热门文章

  1. maven发布jar包到私服以及从私服下载jar包的操作
  2. setup time和hold time
  3. 7-16 约分最简分式
  4. SEO推广技术是什么意思?SEO是什么职业?
  5. 攻防世界 web高手进阶区 10分题 weiphp
  6. 各种搜索引擎及其使用技巧 效率翻倍
  7. Code 39码与Code 128码区别
  8. 27个强大的PDF在线工具,完全免费!
  9. java count sql_SQL优化之SELECT COUNT(*)
  10. 编程逻辑性思维的重要性