Java 程序优化 缩短程序执行时间 同步查询改异步查询 CompletableFuture supplyAsync

时间:2025-03-19 07:48:45

    一般我们写Java程序,都是同步去执行的。但是当遇到一个方法中有多个特别耗时的SQL查询,这时候我们就得等一个个sql慢慢执行完,比如一个SQL查询2秒,3个就是6秒,这个就不是我们想要的呢。那怎么解决呢?第一优化你的SQL;第二优化你的程序。

    本篇文章主要介绍的是优化你的程序,我们可以将同步的SQL查询改为异步的SQL查询。具体如何操作,我就直接贴代码了:

        CompletableFuture<List> firstFuture = (() -> {
            try {
                Map<String, Object> paramsMap = new HashMap<>();
                //TODO 设置参数 因是异步执行 要保持参数一直
                ("XX", "XX");
                ...
                ...

                //数据库查询
                return (paramsMap);
            } catch (Exception e) {
                ();
            }
            return null;
        });

        CompletableFuture<List> secondFuture = (() -> {
            try {
                Map<String, Object> paramsMap = new HashMap<>();
                //TODO 设置参数 因是异步执行 要保持参数一直
                ("XX", "XX");
                ...
                ...

                //数据库查询
                return (paramsMap);
            } catch (Exception e) {
                ();
            }
            return null;
        });
        
        //有几个查询写几个 
        ...
        ...
        
        //接收异步查询的结果
        (firstFuture, secondFuture, ...).join();
        List<Object> firstResult = ();
        List<Object> secondResult = ();
        ...
        ...

     上面代码就是异步查询数据库的核心代码,因为是异步执行,要注意参数的一致性(原子性)。

      改为异步你会发现多个长耗时的SQL异步去执行,大大减少了程序等待的时间,提升了响应。

    上面只是个人理解,如有不正或者更好的方法,请麻烦通知我修正,谢谢!