首页 > 其他分享 >等待执行完后一起收集的多线程

等待执行完后一起收集的多线程

时间:2024-06-21 16:56:24浏览次数:26  
标签:异步 java 收集 完后 futures util CompletableFuture import 多线程

多线程执行

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

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

@Service
public class MyService {

    @Async
    public CompletableFuture<String> asyncMethod(int index) {
        // 异步执行的具体逻辑
        return CompletableFuture.completedFuture("Result " + index);
    }

    public void executeAsyncTasks() throws InterruptedException, ExecutionException {
        // 代码0
        System.out.println("执行异步前的逻辑代码0");

        List<CompletableFuture<String>> futures = new ArrayList<>();

        // 执行5次异步调用
        for (int i = 1; i <= 5; i++) {
            CompletableFuture<String> future = asyncMethod(i);
            futures.add(future);
        }

        // 等待所有异步任务完成并收集结果
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

        // 获取所有异步任务的结果
        List<String> results = new ArrayList<>();
        allFutures.get(); // 等待所有任务完成
        for (CompletableFuture<String> future : futures) {
            results.add(future.get());
        }

        // 后续处理逻辑
        System.out.println("所有异步任务完成,结果为:" + results);
        // 执行代码2
    }
}

 

标签:异步,java,收集,完后,futures,util,CompletableFuture,import,多线程
From: https://www.cnblogs.com/xuehuashanghe/p/18260875

相关文章

  • 【python】 多线程
    什么是多线程?在操作系统上,所有的应用程序都是通过进程来运行的。当一个应用程序启动时,操作系统会为该应用程序创建一个或多个进程,并为这些进程分配必要的资源,如内存空间、文件句柄等,以协助应用程序的运行。在进程内部,可以同时存在多个线程。这些线程共享同一进程的地址空间和其......
  • CompletableFuture多线程并发处理
    CompletableFuture多线程并发处理   概要  一个接口可能需要调用N个其他服务的接口,这在项目开发中还是挺常见的。举个例子:用户请求获取订单信息,可能需要调用用户信息、商品详情、物流信息、商品推荐等接口,  如果是串行(按顺序依次执行每个任务)执行的话,接口的响应速......
  • C#设计:实现文件的多线程下载
    一、程序设计要求能够在下载过程中显示进度信息(如总大小、已下载大小、进度、下载速度、剩余大小、剩余时间、状态、下载的网址等)。支持从指定的URL下载文件。支持多线程并发下载文件。提供友好的用户界面(UI)来下载。具有良好的可扩展性,能够方便地添加新功能或修改现有功能。代......
  • java多线程
    目录多线程的实现方式多线程的第一种实现方式 继承Thread类的方式进行实现多线程的第二种实现方式 实现Runnable接口的方式进行实现利用Callable接口和Future接口方式实现 多线程中常用的成员方法 StringgetName()                返回此线程的名......
  • Java学习基础笔记——多线程基础部分
    第十三章多线程基础13.1线程介绍13.1.1线程相关概念13.2线程创建13.2.1创建线程的两种方式13.2.2继承Threadvs实现Runnable的区别13.2.3线程终止13.3线程方法13.3.1常用方法第一组13.3.2常用方法第二组13.3.3用户线程和守护线程13.4Synchronized13......
  • 如何实现多线程下载大文件
    如何实现多线程下载大文件在应用开发中,实现多线程下载大文件是一个常见的需求,可以有效提高下载效率和用户体验。以下是实现多线程下载大文件的详细步骤和知识点:实现步骤:使用request模块:request模块提供了文件上传下载的基础能力,支持任务管理系统的默认并发功能,简化了下......
  • JVM:不同垃圾收集算法和垃圾收集器 优缺点总结
     如何判断对象是否为垃圾:引用计数法:对象是否被引用,无法解决对象循环引用导致的问题可达性分析:也叫根搜索法 垃圾收集算法1、标记-清除(Mark-Sweep)示意图深蓝色:有引用深灰色:没引用白色:待分配回收前:对整个引用空间不连续的堆对象遍历回收后:引用的对象空间不变,清除:对全......
  • webpack项目开发完后,如何优化打包速度?
    Gzip压缩前端页面文件缓存我们先来简单回顾下http缓存的知识:HTTP1.0是通过Expires(文件过期时间)和Last-Modified(最近修改时间)来告诉浏览器进行缓存的,这两个字段都是UTC时间(绝对时间)。Expires过期控制不稳定,因为浏览器端可以随意修改本地时间,导致缓存使用不精准。而且L......
  • 【网络安全的神秘世界】渗透之信息收集流程
    ......
  • 【JavaEE精炼宝库】多线程(7)定时器
    目录一、定时器的概念二、标准库中的定时器三、自己实现一个定时器3.1MyTimerTask实现:3.2MyTimer实现:一、定时器的概念定时器也是软件开发中的⼀个重要组件。类似于一个"闹钟"。达到一个设定的时间之后,就执行某个指定好的代码(可以用来完成线程池里面的非核心线程......