public class Person extends Thread{private final String name;private CyclicBarrier cb;//本次前进之后的总距离private int now;public Person(String name,CyclicBarrier cb){this.name = name;this.cb = cb;}public synchronized int getNow(){return now;}public synchronized String getPersonName(){return name;}@Overridepublic void run(){while(true){try {cb.await();int random = (int)(Math.random()*3+1);synchronized (this) {now += random;System.out.println(name +"本次跑了 "+random+" 米,共跑了 "+now+" 米");}} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}} }
public class Judge extends Thread{private static final int MAX = 100;private CopyOnWriteArrayList<Person> cowl; public synchronized void setCowl(CopyOnWriteArrayList<Person> cowl){wl = cowl;}private void judge(){System.out.println("n==============start judge=================");/*try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}*/List<Person> list = new ArrayList<>();for(Person p :cowl){Now()>=MAX)list.add(p);}if(list.size()!=0){for(Person p:list)System.out.PersonName()+"率先抵达终点!");it(0);}System.out.println("n==============end judge=================");}@Overridepublic void run() {judge();}
}
public class CyclicBarrierTest {public static void main(String[] args) {Judge judge = new Judge();CyclicBarrier cb = new CyclicBarrier(10, judge);List<Person> list = new ArrayList<>();for(int i=0;i<10;i++){Person p = new Person("tom"+i,cb);p.start();list.add(p);}judge.setCowl(new CopyOnWriteArrayList<>(list));}
}
(start)
==============start judge=================
==============end judge=================tom0本次跑了 2 米,共跑了 2 米
tom3本次跑了 1 米,共跑了 1 米
tom1本次跑了 1 米,共跑了 1 米
tom5本次跑了 1 米,共跑了 1 米
tom9本次跑了 3 米,共跑了 3 米
tom6本次跑了 3 米,共跑了 3 米
tom8本次跑了 2 米,共跑了 2 米
tom2本次跑了 3 米,共跑了 3 米
tom4本次跑了 2 米,共跑了 2 米
tom7本次跑了 2 米,共跑了 2 米==============start judge=================
==============end judge=================
...tom5本次跑了 2 米,共跑了 98 米
tom1本次跑了 3 米,共跑了 97 米
tom8本次跑了 3 米,共跑了 97 米
tom4本次跑了 2 米,共跑了 95 米
tom6本次跑了 2 米,共跑了 91 米
tom9本次跑了 1 米,共跑了 95 米
tom7本次跑了 2 米,共跑了 93 米
tom2本次跑了 2 米,共跑了 92 米
tom3本次跑了 2 米,共跑了 87 米
tom0本次跑了 3 米,共跑了 97 米==============start judge=================
==============end judge=================tom0本次跑了 3 米,共跑了 100 米
tom5本次跑了 1 米,共跑了 99 米
tom1本次跑了 2 米,共跑了 99 米
tom8本次跑了 2 米,共跑了 99 米
tom4本次跑了 2 米,共跑了 97 米
tom6本次跑了 1 米,共跑了 92 米
tom9本次跑了 3 米,共跑了 98 米
tom7本次跑了 2 米,共跑了 95 米
tom2本次跑了 2 米,共跑了 94 米
tom3本次跑了 1 米,共跑了 88 米==============start judge=================
tom0率先抵达终点!
int index = --count;if (index == 0) { // trippedboolean ranAction = false;try {final Runnable command = barrierCommand;if (command != null)command.run();//此处调用的run();ranAction = true;nextGeneration();return 0;} finally {if (!ranAction)breakBarrier();}}
本文发布于:2024-01-28 05:55:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063925205281.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |