首页 > 其他分享 >CompletableFuture 使用

CompletableFuture 使用

时间:2023-08-28 23:22:18浏览次数:37  
标签:futures results 查询 util CompletableFuture 使用 操作

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * @Author: TrueNewBee
 * @Date: 2023/8/28 23:05
 * @Github: https://github.com/TrueNewBee
 * @Description:  通过 CompletableFuture 解决多个查询语句,并把所查询解决汇总封装成一条数据的痛点问题
 */
public class Test2 {
    public static void main(String[] args) {
        // 模拟传来的10个卡号
        List<String> cardNumbers = Arrays.asList("1234567890", "2345678901", "3456789012", "4567890123", "5678901234",
                "6789012345", "7890123456", "8901234567", "9012345678", "0123456789");
        // 一只数据库DAO会返回一个list,所以个list对象,所以先写伪代码,具体根据业务来
        List<CompletableFuture<String>> futures = new ArrayList<>();

        // 这里可以是一个 tra对象/ 一些查询参数,具体按业务来
        for (String cardNumber : cardNumbers) {
            CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
                // 在这里执行数据库查询操作,并返回查询结果
                // 这里只是模拟查询操作,实际需要根据具体的数据库操作进行实现
                //return query(xx,xx,xx,xx)
                return "Query result for card number: " + cardNumber;
            });

            futures.add(future);
        }

        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

        try {
            allFutures.get(); // 等待所有查询操作完成
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        List<String> results = new ArrayList<>();
        // 由于查询结果本来就是一个list ,直接追加即可
        // 可以根据需求去修改下
        for (CompletableFuture<String> future : futures) {
            try {
                String result = future.get(); // 获取每个查询操作的结果
                results.add(result);
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }

        System.out.println("Query results:");
        for (String result : results) {
            System.out.println(result);
        }
    }
}

在上面的代码中,我们首先定义了一个包含10个卡号的列表cardNumbers。然后,我们创建了一个CompletableFuture的列表futures,用于保存每个查询操作的CompletableFuture对象。

在循环中,我们为每个卡号创建一个CompletableFuture对象,并在其supplyAsync方法中执行数据库查询操作。这里只是简单地返回了一个带有卡号的查询结果的字符串,你需要根据具体的数据库操作进行实现。

将每个CompletableFuture对象添加到futures列表中后,我们使用CompletableFuture.allOf方法创建了一个新的CompletableFuture对象allFutures,用于等待所有查询操作完成。

然后,我们使用allFutures.get()方法来等待所有查询操作完成。在这之后,我们遍历每个CompletableFuture对象,使用get()方法获取每个查询操作的结果,并将结果添加到results列表中。

最后,我们打印出所有查询结果。你可以根据实际需求对结果进行进一步处理。

标签:futures,results,查询,util,CompletableFuture,使用,操作
From: https://www.cnblogs.com/chentianxiang180/p/17663665.html

相关文章

  • vue--day74--四个map方法的使用mapState ,mapGetters,mapMutations,mapActions
    1.Count.vue<template><div><h1>当前求和位{{sum}}</h1><h1>当前求和放大10倍后是{{bigSum}}</h1><h1>我在{{school}},学习{{subject}}</h1><selectv-model.number="n"><optionva......
  • CentOS系统中使用SSH进行远程连接
      安装SSH客户端和服务器在CentOS系统中,默认情况下已经安装了OpenSSH客户端和服务器。如果没有安装,可以通过以下命令来安装:sudoyuminstallopenssh-serveropenssh-client启动SSH服务,注意要切换root账号执行命令安装完毕后,需要启动SSH服务。可以通过以下......
  • 开发了一个json格式化工具,使用js格式化json的代码分享
    今天给大家介绍一下如何通过js来格式化json。假设json字符串是:{"name":"刘德华","age":25.2,"birthday":"1990-01-01"}我们使用的是Js的JSON方法先把json字符串转为json对象,方法如下:varjsonString='{"name":"刘德华","age":35.2......
  • 使用Docker-数据卷挂载案例1
      把镜像文件上传到虚拟机中 加载镜像 创建mysql文件夹和data、conf两个子文件夹 把写好的配置文件上传到文件夹中 去hub.docker.com网址中找到mysql的run运行指令 找到配置文件挂载的文件位置 找到数据储存文件挂在的文件位置修改指令  ......
  • 【转载】如何解决 nginx proxy_pass 使用变量 $arg 404 ?
    为什么location/auth0/{proxy_passhttps://cdn.eu.auth0.com/;}这样就可以但是location/auth0/{proxy_passhttps://$arg_host/;}就404$arg_host===cdn.eu.auth0.com  proxy_pass是用了变量的话,nginx就不会自动添加path到host后面例如......
  • 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(11)
    账户管理报表IoTDB可以为用户提供账号权限管理操作,保障数据安全。接下来我将通过以下具体示例向朋友们展示基本的用户权限管理操作,介绍详细的SQL语法和用法详细信息。基本概念用户用户是数据库的合法用户。用户对应于唯一的用户名,并具有密码作为身份验证方式。在使用数据库之前,一......
  • 使用PS去除PDF水印的简单实用方法
    使用PS去除PDF水印的简单实用方法首先首先用PS打开文件,随后选择【图像】-【调整】-【色阶】,调出色阶面板;接着拖动滑块向左移动,直到水印完全消失,最后点击【确定】这样水印就删除啦! ......
  • 使用Docker-数据卷命令
            ......
  • 使用SpringBoot实现网页版交互式增删改查
    1、新建项目选中以下几个DevelopTools:2、引入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • 使用Docker-数据卷挂载案例
                 ......