CyclicBarrier和CountDownLatch的简单使用

1.CyclicBarrier

public class CyclicBarrierTest {
    public static void main(String[] args) {
        //CyclicBarrier(int parties, Runnable barrierAction) 
        //创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,
        //并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行。

        CyclicBarrier c=new CyclicBarrier(5,new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());    
            }
        });
        for (int i = 0; i < 5; i++) {
            new Thread(new MyCyclicBarrier(c)).start();
        }    
    }
}
class MyCyclicBarrier implements Runnable{
    private CyclicBarrier barrier;
    
    public MyCyclicBarrier(CyclicBarrier barrier) {
        super();
        this.barrier = barrier;
    } 

    @Override
    public void run() {
        System.out.println("barrier before");
        System.out.println(Thread.currentThread().getName());
        try {
            barrier.await();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("barrier after");   
    }
}

线程运行到某个点之后,会停止运行,直到所有的线程都到达这个点,线程才会重新继续运行。

此实例中有五个线程,只有当五个线程都运行到barrier.await()之后,之前停止的线程才会继续执行。

2.CountDownLatch

調用await()方法之后会出现阻塞问题。只有当count值为0时,才会继续执行下去。每调用一次countDown()方法,count值就会-1.

扫描二维码关注公众号,回复: 2415984 查看本文章

猜你喜欢

转载自blog.csdn.net/shilu963/article/details/81220832