java并发编程之CyclicBarrier(循环栅栏)

package com.zhong;

import java.util.concurrent.CyclicBarrier;

/**
 * Cyclic意思是循环,Barrier意思是屏障,那么CyclicBarrier翻译过来就是循环栅栏。
 * 它是一个同步辅助类,能让一组线程互相等待,
 * 直到这一组线程都到了一个公共屏障点,各线程才能继续向下执行。因为该屏障能够在释放等待线程后继续重用,所以叫循环屏障。
 * @author admin
 *
 */
public class CyclicBarrierTest {
    
    private static final int THREAD_NUM = 5;
    
    public static class WorkerThread implements Runnable {

        CyclicBarrier barrier;

        public WorkerThread(CyclicBarrier b) {
            this.barrier = b;
        }

        @Override
        public void run() {
            try {
                System.out.println("Worker's waiting");
                // 线程在这里等待,直到所有线程都到达barrier。
                barrier.await();
                System.out.println("ID:" + Thread.currentThread().getId() + " Working");
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) {
           CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {

            // 当所有线程到达barrier时执行
            @Override
            public void run() {
                System.out.println("Inside Barrier");
            }
        });

        for (int i = 0; i < 20; i++) {
            new Thread(new WorkerThread(cb)).start();
        }
    }
}

 

你可能感兴趣的:(java)