多线程之CyclicBarrier(循环障碍物)应用

假设有这么个场景: 一段程序中需要调用如下几个API:

然后将上述三个数据封装发送给Kafka

当然,单线程完全可以完成这些任务,我只是为了较好的利用例子

需要所有的子任务都完成时,才执行主任务,这个时候就可以选择使用CyclicBarrier

package com.nuoyuan.kafkademo.component;

import com.alibaba.fastjson.JSON;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author: Syliu
 * @Date: 2018/6/2 15:07
 * @Description:
 * 需要所有的子任务都完成时,才执行主任务,这个时候就可以选择使用CyclicBarrier
 *  1.需要百度faceAPI
 *  2.需要调用用户信息API
 *  3.需要调用权限API
 */
public class CyclicBarrierDemo {

    public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
        CyclicBarrier barrier = new CyclicBarrier(4);
        ExecutorService executor = Executors.newFixedThreadPool(3);
        final Map<Object, Object> map = new HashMap<>(3);
        //1.需要百度faceAPI
        executor.submit(()->{
            map.put("获取百度API","SUCCESS");
            System.out.println("获取百度API完成");
            barrier.await();
            System.out.println("百度API顺利通过");
            return null;
        });
        //1.需要调用用户信息API
        executor.submit(()->{
            map.put("调用用户信息API","SUCCESS");
            System.out.println("调用用户信息API完成");
            barrier.await();
            System.out.println("调用用户信息API顺利通过");
            return null;
        });
        //1.需要调用权限API
        executor.submit(()->{
            map.put("调用权限API","SUCCESS");
            System.out.println("调用权限API完成");
            barrier.await();
            System.out.println("调用权限API顺利通过");
            return null;
        });
        //主线程等待
        System.out.println("主线程进入等待状态");
        barrier.await();
        executor.shutdown();
        System.out.println("主线程放行");
        System.out.println("发送卡夫卡:数据为"+ JSON.toJSONString(map));

    }
}

这样一般可以缩减调用时间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值