代码拉取完成,页面将自动刷新
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();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。