HorseRace

来源:互联网 发布:东莞关键词优化外包 编辑:程序博客网 时间:2024/05/21 19:21
package mypack;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;class Horse implements Runnable{private static int counter=0;private int id=counter++;private int strides=0;private CyclicBarrier barrier;private static Random random=new Random(47);public Horse(CyclicBarrier b){barrier=b;}@Overridepublic void run() {// TODO Auto-generated method stubtry{while(!Thread.interrupted()){strides += random.nextInt(5);barrier.await(); }}catch(InterruptedException | BrokenBarrierException e){System.out.println("interupt");}}public  int getStribes(){return strides;}public String tracks(){StringBuilder builder = new StringBuilder();for(int i=0;i<getStribes();i++)builder.append("*");builder.append(id);return builder.toString();}public String toString() {return "Horse "+id+" ";}}public class HorseRace {static final int FINISH_LINE=75;List<Horse> horses=new ArrayList<Horse>();ExecutorService exec=Executors.newCachedThreadPool();private CyclicBarrier barrier;public HorseRace(int nHorse,int pause){barrier=new CyclicBarrier(nHorse, new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubStringBuilder builder=new StringBuilder();for(int i=0;i<FINISH_LINE;i++)builder.append("=");System.out.print(builder);System.out.println();for(Horse h :horses)System.out.println(h.tracks());for(Horse h : horses){if(h.getStribes()>=FINISH_LINE){System.out.println(h+ "Won");exec.shutdownNow();return;}}try {TimeUnit.MILLISECONDS.sleep(pause);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});for(int i=0;i<nHorse;i++){Horse horse = new Horse(barrier);horses.add(horse);exec.execute(horse);}}public static void main(String[] args) {// TODO Auto-generated method stubint nhorse=7;int pause=200;new HorseRace(nhorse, pause);}}

0 0
原创粉丝点击