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;
	}
}


SAP SD RRB实战:从DIP参数文件到DP90/DP91开票的完整链路解析 本文详细解析了SAP SD模块中RRB(Resource-related Billing)业务场景的完整链路,从DIP参数文件配置到DP90/DP91开票操作。通过实战案例分享DIP参数文件的核心配置技巧、特性设置及物料决定要点,帮助用户掌握动态开票的关键技术,提升SAP SD RRB的实施效率。 阅读详情

相关推荐

RK3588上从零部署Facenet人脸识别:PyTorch转ONNX再到RKNN的完整避坑指南

本文提供了在RK3588开发板上从零部署Facenet人脸识别模型的完整指南。详细介绍了从PyTorch模型导出、转换为ONNX格式,再通过RKNN-Toolkit2转换为RKNN格式的完整流程,并重点分享了环境配置、算子兼容性处理、量化调优及板端部署中的关键步骤与避坑经验。

river的博客 464

Tian Ji -- The Horse Racing

Tian Ji--The House Racing

865

深入分析RAG知识库多模态数据预处理

多模态企业数据预处理是构建高质量RAG知识库的关键环节。本文详解了处理流程:1)文档格式识别与路由;2)多模态内容提取(文本、图像、音视频);3)结构解析与语义重建;4)数据清洗与增强;5)智能分块(强调语义完整性);6)元数据注入。推荐使用开源工具如PaddleOCR、Whisper、BLIP-2等,或商业API处理复杂场景,最终生成带丰富元数据的结构化内容,为后续向量化检索奠定基础。

qq_35354529的博客 1379

并发(17):仿真(上)

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

游王子og的博客 351

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)

本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。

resnet7explorer的博客 935

Excel基金净值自动更新:手把手教你用Power Query抓取天天基金网数据(含常见错误修复)

本文详细介绍了如何利用Excel内置的Power Query工具,从天天基金网自动抓取基金净值数据,实现表格数据的自动刷新。通过手把手教程,您将学会构建参数化查询、整合多基金数据、计算持仓盈亏,并解决网页结构变动等常见错误,最终打造一个专属的、可自动更新的基金监控仪表盘,彻底告别手动更新。

xx56789的博客 728

Thinking in Java 学习笔记

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

Walle的博客 1138

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

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

第一章:GEE 和 GEEMAP

在本章中,我们将介绍地理空间数据科学、谷歌地球引擎和地理地图的基础知识。然后,我们将逐步完成设置 conda 环境和安装 geemap 的步骤。我们还将学习如何在不在您的计算机上安装任何东西的情况下将 geemap 与 Google Colab 一起使用。...

韩天放 8050

使用 Simulink + Simscape Electrical 实现一个变压器耦合式单相全波整流器的仿真模型

本文介绍了基于Simulink的变压器耦合式单相全波整流器建模与仿真方法。详细说明了从项目创建、模块添加、电路搭建到参数配置的完整建模过程,重点分析了整流器的效率与损耗特性,包括变压器损耗和二极管导通损耗。通过仿真展示了输入输出波形特征,并提出了选用高效元件、优化变压器设计等改进建议。该案例为电力电子系统建模提供了实用参考,有助于深入理解整流电路工作原理和性能优化方法。

amy_mhd的博客 186

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

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

Preacher_Qiao的博客 8288

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型

本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。

amy_mhd的博客 304

田忌赛马——TianJi-The Horse Racing

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

Iversonx的博客 1011

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

光与热的博客 627

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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、付费专栏及课程。

余额充值