CyclicBarrier同时执行

来源:互联网 发布:淘宝助理数据包 编辑:程序博客网 时间:2024/06/05 11:31
import java.io.IOException;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * CyclicBarrier 假设一个场景 每一个线程代表一个跑步运动员 * 当所有的运动员都准备好以后才出发 只要一个人没有准备好 大家都处于等待 * @author admin * */public class UseCyclicBarrier {    static class Runner implements Runnable {          private CyclicBarrier barrier;          private String name;          public Runner(CyclicBarrier barrier, String name) {              this.barrier = barrier;              this.name = name;          }          public void run() {              try {                  Thread.sleep(1000 * (new Random()).nextInt(5));                  System.out.println(name + " 准备OK.");                  barrier.await();              } catch (InterruptedException e) {                  e.printStackTrace();              } catch (BrokenBarrierException e) {                  e.printStackTrace();              }              System.out.println(name + " Go!!");          }      }     public static void main(String[] args) throws IOException, InterruptedException {          CyclicBarrier barrier = new CyclicBarrier(3);  // 3         ExecutorService executor = Executors.newFixedThreadPool(3);          executor.submit(new Thread(new Runner(barrier, "zhangsan")));          executor.submit(new Thread(new Runner(barrier, "lisi")));          executor.submit(new Thread(new Runner(barrier, "wangwu")));          executor.shutdown();      }  }  
wangwu 准备OK.zhangsan 准备OK.lisi 准备OK.wangwu Go!!lisi Go!!zhangsan Go!!
原创粉丝点击