Thinking inJava学习笔记 HorseRace.java

HorseRace.zip 模拟赛马 立即下载

HorseRace.java

每个horse每走一步,都会停下来等待其他horse完成这一步操作

cyclicBarrier的线程会在每一步所有horse完成操作后执行一次

package com.test.concurrent;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class HorseRace {
	static final int FINISH_LINE=75;
	private List<Horse> horses=new ArrayList<Horse>();
	private ExecutorService exec=Executors.newCachedThreadPool();
	private CyclicBarrier barrier;
	public HorseRace(int nHorses, final int pause){
	
	/*CyclicBarrier</tt> that will trip when the
     * given number of parties (threads) are waiting upon it, and which
     * will execute the given barrier action when the barrier is tripped,
     * performed by the last thread entering the barrier.
     */
		barrier=new CyclicBarrier(nHorses,new Runnable(){
			public void run(){
				StringBuilder sb=new StringBuilder();
				for(int i=0;i<FINISH_LINE;i++){
					sb.append("=");
				}
				System.out.println(sb.toString());
				for(Horse horse: horses){
					System.out.println(horse.tracks());
				}
				for(Horse horse: horses){
					if(horse.getStrides()>FINISH_LINE){
						System.out.println(horse+" won!!!");
						exec.shutdownNow();
						return;
					}
				}
				try {
					TimeUnit.MILLISECONDS.sleep(pause);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					System.out.println("barrier-action sleep interrupted");
					e.printStackTrace();
				}
			}
		});
		for(int i=0;i<nHorses;i++){
			Horse horse=new Horse(barrier);
			horses.add(horse);
			exec.execute(horse);
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new HorseRace(7,200);
	}

}
class Horse implements Runnable{
	@Override 
	public void run(){
		try {
			while(!Thread.interrupted()){
				synchronized(this){
					strides+=rand.nextInt(3);
				}
				barrier.await();
			}
			
		} catch (InterruptedException | BrokenBarrierException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public String tracks() {
		// TODO Auto-generated method stub
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<getStrides();i++){
			sb.append("*");
		}
		sb.append(id);
		return sb.toString();
	}
	private static int counter=0;
	private final int id=counter++;
	private int strides=0;
	private static Random rand=new Random(47);
	private static CyclicBarrier barrier;
	public Horse(CyclicBarrier b){
		barrier=b;
	}
	public synchronized int getStrides(){
		return strides;
	}
	public String toString(){
		return "Horse id: "+id;
	}
}


Python使用netmiko配置华为交换机 1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。 阅读详情

相关推荐

【YOLO 系列】基于YOLOv8的工业零件表面缺陷智能检测系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了如何基于YOLOv8深度学习模型和PyQt5图形界面,构建一套完整的工业零件表面缺陷智能检测系统。内容涵盖从环境搭建、数据集标注、模型训练调参到最终封装成可执行桌面软件的全流程,并深入解析了YOLOv8在工业视觉场景中的技术优势与落地优化策略。

ol78901234的博客 401

Tian Ji -- The Horse Racing

Tian Ji--The House Racing

865

从淬火实验到仿真验证:用ANSYS APDL复现钢球冷却温度变化(含动画生成教程)

本文详细介绍了如何利用ANSYS APDL进行淬火过程的瞬态热分析仿真,以复现钢球冷却温度变化。内容涵盖从实验数据校准材料参数、构建高保真模型、设置非线性瞬态求解,到提取节点温度曲线和生成温度云图动画的全流程。通过APDL命令流实现自动化,为工程研发和学术研究提供高效、可靠的仿真验证方法。

pz8901234的博客 791

并发(17):仿真(上)

并发最有趣也最令人兴奋的用法就是创建仿真。通过使用并发,仿真的每个构件都可以成为其自身的任务,这使得仿真更容易编程。许多视频游戏和电影的CGI动画都是仿真,前面所示的HorseRace.java和GreenhouseScheduler.java也可以被认为是仿真。

游王子og的博客 351

python实现马丁策略(股市) (附完整源码)

python实现马丁策略(股市) (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 603

Unity中的Timeline

Timeline与动画系统类似,但是它可以针对多个物体做出一系列多个动画,它可以创建多个轨道,对象激活与隐藏轨道,动画轨道,声音轨道等。每个轨道都可以单独编辑,轨道内的不同资源可以排列并且融合

L的博客 1万+

Thinking in Java 学习笔记

Java内存JVM内存空间划分:l  方法区(Method Area):方法区存放类信息(类名、修饰)、类的静态变量、final常量和方法信息。在Hotspot中,方法区对应的是持久代(permanent generation)。方法区的垃圾收集主要针对常量池回收和对已加载类的卸载l  堆区(Heap):堆区存放对象实例及数组,通过new创建的对象都存储在堆区,堆区在虚拟机启动的时候被创建,并被所...

Walle的博客 1138

【图像分类】卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

卷积神经网络之VGGNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

学无止境、积少成多、厚积薄发 2430

F - Tian Ji -- The Horse Racing

题目如下: Here is a famous story in Chinese history.  "That was about 2300 years ago. General Tian Ji was a high official in thecountry Qi. He likes to play horse racing with the king and others." 

让你一生残梦的博客 661

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5981

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

《Thinking in Java》读后总结与感想

作为Java界的四大名著之一《Thinking in Java》一直备受推崇,我很早就知道了这本书,当时只是初涉Java,粗略的翻了翻之后觉得看起来这本书讲的比较深就没有再去碰它,后来Java基础学完之后又忙着学Android开发的知识,就一直没把这本书当一回事。重新将它拿起是去年的事,当时朱凯大神向我推荐了这本书,我当时决定把它找出来认真仔细的读一读。对,就是下面这本(用的是百度百科的图):

Preacher_Qiao的博客 8288

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

田忌赛马——TianJi-The Horse Racing

题目描述:   田忌和齐王赛马,胜一场可以获得200金,负一场损失200金,平局无得无失。现在给出马的数量,田忌的每匹马的速度和齐王的每匹马的速度。求出田忌最多可以赢得多少金。    输入包含多组数据。每组数据的第一行为一个正整数n(n≤1000),表示每一方有多少匹马,第二行为n个整数表示田忌每匹马的速度,第三行n个整数表示齐王每匹马的速度。当n为0时表示输入数据结束。每组样例输出一行,给出田忌...

Iversonx的博客 1011

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

我用了两年时间去读《Thinking in Java》

路漫漫其修远兮,吾将上下而求索。 ——题记 我用了两年时间去读《Think...

让学习编程变得生动有趣~ 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java编程思想笔记-并发之CyclicBarrier

CyclicBarrier和CountDownLatch类似,可以让一组任务并行的工作,然后在下一个步骤之前等待,直至所有的任务完成,但是CountDownLatch只触发一次事件,而CyclicBarrier可以多次重用示例: 赛马游戏class Horse implements Runnable{ private static int counter=0; //赛马id

光与热的博客 627

Tian Ji -- The Horse Racing **

Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others. Both of

海绵的博客 791

Horse-racing Duals

题目链接 HORSE-RACING DUALS 思路: 创建数组 array 并读取 Pi 值存储于其中 更改 IFS 为换行符(’\n’)后, 使用 sort -n 对 array 进行排序, 结果存储到新的数组 sorted_array 遍历 sorted_array, 依次比较"后一元素值与当前元素值的差值"的大小: 定义最小值 minimum 为 sorted_array 最后一个元素...

re4g6gr46的博客 328

JAVA编程思想笔记 : 并发 [ 二 ]

死锁 任务之间相互等待的连续循环,没有哪个线程能继续. 这样称之为: 死锁 满足死锁的条件,为以下四种同时发生,如果想要破坏死锁,只需要破坏其中一条即可. 互斥条件.任务使用的资源中至少有一个是不能共享的. 至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源. 资源不能被任务抢占,任务必须把资源释放当做普通事件. 必须有循环等待,这时,一个任务等待其他任...

张伯毅的专栏 918

HDU 1052 Tian Ji -- The Horse Racing

Tian Ji -- The Horse RacingTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4184    Accepted Submission(s): 1100Problem DescriptionHere is

-- bird -- 1576

7-17 Horse Racing (25分) 赛马

There is a horse racing between QW and TJ. SB is to be the judge. QW and TJ both have horses. Each horse has an ability that is different from any other one. They arrange their horses in a fixed order. The first horse of QW’s will compete to the first of T

akyzz_15082282的博客 792

hdu 1052 horse racing(贪心算法)

问题描述: Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others."

u012248410的专栏 608

ACMSTEP 1.3.3 Tian Ji -- The Horse Racing //排序 枚举

原题链接 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s):

天道酬勤 1359

The Horse Racing

hdu-1052-Tian Ji -- The Horse Racing

dy476813515的专栏 460
上一篇: java编程思想并发学习笔记(rocket and rockets)
下一篇: Thinking in Java学习笔记 CountDownLatch(CountDownLatchDemo.java)
fantasyagain
博客等级 码龄19年 18粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值