/** * @author chenlinguang * @create 2018-03-02 16:40 **/ package com.guang.learning; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class TestCyclicBarrier { public static void main(String[] args) { /** * 栅栏:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点。 * 利用栅栏,可以使线程相互等待,直到所有线程都到达某一点,然后栅栏将打开,所有线程将通过栅栏继续执行。 */ new TestCyclicBarrier().testCycliBarrier(); } public void testCycliBarrier(){ int count = 10; CyclicBarrier barrier = new CyclicBarrier(count, new Runnable() { @Override public void run() { System.out.println("10个线程都执行完了,现在主线程可以执行了。。" + System.currentTimeMillis()); } }); // they do not have to start at the same time… for (int i = 0; i < count; i++) { new Thread(new Task(barrier)).start(); } } class Task implements Runnable{ private CyclicBarrier barrier; public Task(CyclicBarrier barrier) { this.barrier = barrier; } @Override public void run() { //做任务,为了测试主线程被等待的效果,将此线程任务执行时间延迟 try { Thread.sleep((long) (Math.random() * 5000)); } catch (InterruptedException e1) { e1.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "开始执行时间:" + System.currentTimeMillis()); try { barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } } }
CyclicBarrier的用法
最新推荐文章于 2023-06-06 20:34:49 发布