1 Star 4 Fork 0

sumAll/Java编程思想(第四版)

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
HorseRace.java 2.64 KB
一键复制 编辑 原始数据 按行查看 历史
sumAll 提交于 4年前 . 书本P725的赛马游戏
package net.mindView.concurrency;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
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){
barrier = new CyclicBarrier(nHorses, new Runnable() {
@Override
//当所有Horse都调用await()后,执行该方法
public void run() {
StringBuilder s = new StringBuilder();
for(int i=0;i<FINISH_LINE;i++)
s.append("=");
System.out.println(s);
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){
System.out.println("barrier-action sleep interrupted");
}
}
});
for(int i=0;i< nHorses;i++){
Horse horse = new Horse(barrier);
horses.add(horse);
exec.execute(horse);
}
}
public static void main(String[] args) {
int nHorse = 6;
int pause = 200;
new HorseRace(nHorse,pause);
}
}
class Horse implements Runnable{
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 void run(){
try{
while(!Thread.interrupted()){
synchronized (this){
strides += rand.nextInt(3);
}
barrier.await();
}
}catch (InterruptedException e){
}catch (BrokenBarrierException e){
throw new RuntimeException();
}
}
public String toString(){ return "Horse " + id + " "; }
public String tracks(){
StringBuilder s = new StringBuilder();
for(int i=0;i < getStrides(); i++){
s.append("*");
}
s.append(id);
return s.toString();
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sumall/Thinking-in-Java.git
git@gitee.com:sumall/Thinking-in-Java.git
sumall
Thinking-in-Java
Java编程思想(第四版)
master

搜索帮助