首页 > 其他分享 >CountDownLatch的实际中的使用

CountDownLatch的实际中的使用

时间:2023-03-25 17:56:44浏览次数:28  
标签:node CountDownLatch List Objects getLabel 使用 nodes 实际

  接口太慢,其中一种方式就是使用多线程进行快速处理。

  介绍下,如何在项目中写代码的。

 

  这里在for循环里使用调用,不是好方式,碍于接口只支持单个节点的查询。

    private List<DeviceInfo> getDeviceByEmissionNoList(Long customerId, List<String> emissionSourceNoList) {
        List<DeviceInfo> deviceNoList = Lists.newArrayList();
        CountDownLatch countDownLatch = new CountDownLatch(emissionSourceNoList.size());
        for (String emissionSourceNo : emissionSourceNoList) {
            executor.submit(() -> {
                try {
                    NodeInfo<Object, Object> nodeInfo = emissionSourceServiceFeign.queryDownVertex(DtoConvert.buildEmissionSourceVertexInfo(customerId, emissionSourceNo));
                    if (Objects.nonNull(nodeInfo)) {
                        List<VertexInfo<Object>> nodes = nodeInfo.getNodes();
                        if (!CollectionUtils.isEmpty(nodes)) {
                            nodes.forEach(node -> {
                                if (Objects.equals(VertexLabelConstants.MONITOR, node.getLabel()) || Objects.equals(VertexLabelConstants.GOVERN, node.getLabel())) {
                                    LinkedHashMap deviceInfoMap = (LinkedHashMap) node.getNode();
                                    if (Objects.nonNull(deviceInfoMap)) {
                                        DeviceInfo deviceInfo = (DeviceInfo) MetaClassUtil.mapToObj(deviceInfoMap, DeviceInfo.class);
                                        deviceInfo.setLabel(node.getLabel());
                                        deviceNoList.add(deviceInfo);
                                    }
                                }

                            });
                        }
                    }
                } finally {
                    countDownLatch.countDown();
                }
            });
        }
        try {
            countDownLatch.await();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return deviceNoList;
    }

  注意点:

  1.await放在外面

  2.构造函数的size个数

  3.countDown的时候,需要放在finally中

 

二:接口慢查

  针对上面的这段查询,一般可以考虑三个方面的处理:

  1.直接批量处理

  2.多线程处理

  3.查询完成后,使用缓存,但是需要看看是否是常变化的数据,缓存效果并不大。

 

标签:node,CountDownLatch,List,Objects,getLabel,使用,nodes,实际
From: https://www.cnblogs.com/juncaoit/p/17255241.html

相关文章

  • 使用css绘制聊天气泡
    实现原理:给聊天区域的边框补充一个三角形1:左三角聊天气泡.left-box{max-width:540rpx;min-height:80rpx;border-radius:10rpx;border:2rpxsolid#D7......
  • flask使用jwt
    importdatetimeimportjwtfromflaskimportcurrent_appclassAuth:def__init__(self,user_id,expires):self.id=user_idself.expires......
  • Kafka快速使用与详解
    一、Kafka简介1.概念 Kafka是一个分布式的、基于发布/订阅的消息队列,最初由LinkedIn开发,并于2011年成为Apache项目的一部分。Kafka具有高吞吐量、可扩展性、持久性和容......
  • ADB使用说明
    安卓日志相关:adblogcat->C:\Users\1\Desktop\pkqlog\pkq.txt该指令的含义是将app运行的日志存储到C:\Users\1\Desktop\pkqlog\pkq.txt当中需要先建立好文件夹,如果......
  • Teamcenter_NX集成开发:UF_UGMGR_invoke_pdm_server函数的使用
    之前了解到通过UFUN函数UF_UGMGR_invoke_pdm_server可以调用TeamcenterITK函数,从而可以获取及编辑Teamcenter对象。UFUN中有样例代码,但是就是不知道怎么使用,今天下午看了......
  • kratos中使用kafka不同group消费同一个topic的坑
    参考项目地址https://gitee.com/huoyingwhw/kratos_kafka.git现象 像上图那样写的话,项目启动后,往topic中放入数据,只有article_group2会消费数据!原因~~~ ......
  • asp.net core3.1使用EF Core出现:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT
    asp.netcore3.1使用EFCore3.1有毒efcore3.1遇到sqlserver2008'OFFSET'附近有语法错误。\r\n在FETCH语句中选项NEXT的用法无效。这就很烦,想加个EntityFrame......
  • ArcEngine|实现图层交换功能与使用Itool封装功能
    1图层功能1.1实现图层顺序交换功能(1)功能分析图层顺序交换场景和功能:首先鼠标在TOCControl范围中,并单击左键不放,对图层进行拖拽。如果拖拽后鼠标从选中图层标题处移动......
  • m分别使用BP神经网络和GRNN网络进行时间序列预测matlab仿真
    1.算法描述广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预......
  • Zookeeper快速使用与详解
    一、Zookeeper简介1.概念 Zookeeper是一个开源的分布式协调服务,用于管理大型集群中的资源、配置信息和命名服务等;也是一个高性能的、可靠的、分布式的、开放源代码的协......