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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CyclicBarrierCountDownLatch都是用于线程间的协调和同步的工具,但它们在使用场景上有一些区别。 CountDownLatch适用于一组线程等待另一组线程完成某个任务后再继续执行的场景。在CountDownLatch中,我们可以通过调用countDown()方法来减少计数器的值,而调用await()方法的线程会被阻塞,直到计数器的值变为0。这种机制可以用于实现一组线程等待其他线程完成初始化工作、数据加载等场景。 CyclicBarrier适用于一组线程互相等待,直到所有线程都到达某个屏障点后再继续执行的场景。在CyclicBarrier中,我们可以通过调用await()方法来等待其他线程到达屏障点,当所有线程都到达后,屏障点会被打破,所有线程可以继续执行。这种机制可以用于实现多个线程并发执行某个任务,然后在某个节点进行汇总或者等待其他线程的结果。 综上所述,CountDownLatch适用于一组线程等待另一组线程完成某个任务后再继续执行的场景,而CyclicBarrier适用于一组线程互相等待,直到所有线程都到达某个屏障点后再继续执行的场景。 #### 引用[.reference_title] - *1* *2* *3* [CountDownLatchCyclicBarrier使用](https://blog.csdn.net/qq_33371766/article/details/122017085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值