首页 > 其他分享 >利用多线程+countDownluanch 优化查询接口提升效率10倍以上

利用多线程+countDownluanch 优化查询接口提升效率10倍以上

时间:2022-10-12 14:22:20浏览次数:53  
标签:10 activity fields countDownluanch private forms countDownLatch 多线程 CountDownLat

最近在做工单系统的生产调优,客户想要单子秒出

花了一天时间定位问题,发现查询MySQL、Mongo、Redis 查询耗时都很小,在0~4ms

耗时较大的是一段给 activity 中 form 的 field 设置属性的遍历

有一段 activities.forEach(activity -> {}),循环中有两个嵌套,一个两层,一个三层,逻辑上不好拆分

于是采用多线程+countdownlaunch,把每次循环通过线程发出去,原有逻辑放到 Runnable 的 run 方法中

countdownlaunch卡住主线程,等待所有并行线程执行完毕

大大降低消耗时间,测试工单查询调用该方法的耗时由原先的 1.2s 降低至 120ms

CountDownLatch countDownLatch = new CountDownLatch(activities.size());
activities.forEach(activity -> {
    AssembleForm assembleForm = new AssembleForm(activity, forms, fields, countDownLatch);
    Thread thread = new Thread(assembleForm);
    thread.start();
});
try {
    countDownLatch.await();
} catch (InterruptedException e) {
    log.error("countDownLaunch error: {}", e.getMessage());
}

public class AssembleForm implements Runnable{

    private List<Form> forms;
    private List<Field> fields;
    private Activity activity;
    private CountDownLatch countDownLatch;


    AssembleForm(Activity activity, List<Form> forms, List<Field> fields, CountDownLatch countDownLatch){
        this.activity = activity;
        this.forms = forms;
        this.fields = fields;
        this.countDownLatch = countDownLatch;
    }

    @Override
    public void run() {
        // 原有逻辑
        codes...
        countDownLatch.countDown();
    }
}

标签:10,activity,fields,countDownluanch,private,forms,countDownLatch,多线程,CountDownLat
From: https://www.cnblogs.com/BigBender/p/16784384.html

相关文章

  • 8.NIO-多线程优化
    1.4.4、多线程优化设计思路:分两组选择器单线程配一个选择器,专门处理accpet事件(建立连接)BOSS创建多线程,每个线程一个选择器,专门处理read事件WORK服务端@Slf4jp......
  • 9.NIO-多线程work轮询
    1.4.5、多线程多work轮询@Slf4jpublicclassThreadServerWorks{publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{T......
  • 10.NIO-IO模型
    1.5、NIOBIO1.5.1、StreamChannelstream不会自动缓冲数据,channel会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream仅支持阻塞API,channel同时支持阻塞、非......
  • 【2022-10-05】回趟老家
    20:00即使生活还相当艰难,爱情还隐隐约约,学习还道路方长,社会还明明暗暗,人间还有许多不平,你也要投入,你也要尽力尽情尽兴尽一切可能,努力争取一切可以争取到也应该争取到的,以......
  • 【2022-10-04】连岳摘抄
    23:59我觉得个人的态度最好的一方面了解到自己的渺小,一方面尽量地希望这个渺小的生命还是有点意义。                     ......
  • [20221012]TNS-12543 TNSdestination host unreachable.txt
    [20221012]TNS-12543TNSdestinationhostunreachable.txt--//今天尝试本机连接测试库,出现如下问题.sqlplus报ORA-12543:TNS:destinationhostunreachable错误.R:\>tns......
  • GW100-SAP Gateway and CDS Views
    SAPGatewayandCDSViews1、解释推荐的SAPFiori编程模型CDS视图是以数据库为中心的应用程序的下一代数据定义和访问。CDS视图提供了一个跨平台的统一抽象层---......
  • CSS - 10 动画
    10.动画动画和过渡类似,都可以实现一些动态效果。不同的是过渡需要在某个属性发生变化时才会触发,动画可以自动触发动态效果设置动画效果,需要先设置一个关键帧,关键帧......
  • 2022/10/12线程核心概念
    线程核心概念线程就是独立的执行路径。在程序运行时,即使自己没有创建线程,后台也会有多个线程,如主线程,gc线程。main()称之为主线程,为系统的入口,用于执行整个程序。......
  • 多线程
    创建线程继承Thread类创建线程publicclassThread01{publicstaticvoidmain(String[]args){//创建Cat对象,可以当做线程使用Catcat=ne......