1. 程式人生 > >十三、柵欄CyclicBarrier

十三、柵欄CyclicBarrier

一、簡介

柵欄CyclicBarrier的作用就是等待一組執行緒都準備好了,然後執行某個任務。這與CountDownLatch很相似。

但是CyclicBarrier和CountDownLatch是有區別的:

1)CyclicBarrier可以複用,你可以呼叫Reset方法重新初始化;CountDownLatch是一次性的。

2)CyclicBarrier是一組執行緒相互等待,而CountDownLatch是一個或一組執行緒等待另外一個或者一組執行緒。

JDK文件:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/CyclicBarrier.html

二、示例

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierDemo {

    private static CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() {
        @Override
        public void run() {
            System.out.println(
"全都到齊了"); } }); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 3; i++) { new Thread(() -> { try { barrier.await();
            System.out.println("end await"); }
catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }).start(); System.out.println("啟動 i=" + i); Thread.sleep(1000); } } }