多线程-CompletableFuture类

项目场景:

  1. 多个查询SQL一起使用
  2. 微服务模块,互相调用
  3. 什么场景会使用多线程?平常的学习和实际当中,你是怎么用到的?

问题描述

最开始学习编程的时候,我们写的程序代码,都是**顺序执行**的,有时候,为了提高程序的执行速度,就衍生了相关的方案

原因分析:

解决方案:

java.util.concurrent.CompletableFuture 是 Java 8 引入的一个类,它实现了 Future 接口,并提供了更强大的**异步编程**能力。CompletableFuture 可以用于异步执行任务,并在任务完成时获取结果或处理异常。它还支持链式调用、组合多个异步操作以及转换和处理结果。

import java.math.BigDecimal;
import java.util.concurrent.CompletableFuture;

public class TestApp1 {
    public static void main(String[] args) {
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            //TODO 循环 1 百万次
            for (int i = 0; i < 1000000; i++) {

            }
            System.out.println("我是任务 1 ");
            return "我是任务 1 ";
        });

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            //TODO 循环 1 百次
            for (int i = 0; i < 100; i++) {

            }
            System.out.println("我是任务 2 ");
            return "我是任务 2 ";
        });

        CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {
            //TODO 循环 1 万次
            for (int i = 0; i < 10000; i++) {

            }
            System.out.println("我是任务 3 ");
            return "我是任务 3 ";
        });


        CompletableFuture<Void> alledOf = CompletableFuture.allOf(future1, future2, future3);

        alledOf.thenRun(() -> {
            try {
                String result1 = future1.join();
                String result2 = future2.join();
                String result3 = future3.join();
                System.out.println("");
                System.out.println("所有任务已完成,结果如下:");
                System.out.println(result1);
                System.out.println(result2);
                System.out.println(result3);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

    }
    
	public static void EXECUTE(int i) {
	        System.out.println("row : " + i);
	    }
	
	}

执行效果:

我是任务 2 
我是任务 3 
我是任务 1 

所有任务已完成,结果如下:
我是任务 1 
我是任务 2 
我是任务 3 

我们可以清楚的看到,在执行任务的时候,出现了 2,3,1的 打印输出结果,这也就证实了,异步编程的概念

相关推荐

  1. 线-CompletableFuture

    2024-07-16 13:44:02       26 阅读
  2. Qt的线

    2024-07-16 13:44:02       36 阅读
  3. 线(9)Thread和Runnable接口

    2024-07-16 13:44:02       39 阅读
  4. C++线对于的静态成员处理

    2024-07-16 13:44:02       31 阅读
  5. Linux线

    2024-07-16 13:44:02       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 13:44:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 13:44:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 13:44:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 13:44:02       69 阅读

热门阅读

  1. window下minio的备份

    2024-07-16 13:44:02       20 阅读
  2. 运动控制:编码器滤波

    2024-07-16 13:44:02       15 阅读
  3. 数据分析常用工具汇总

    2024-07-16 13:44:02       21 阅读
  4. Sklearn 入门教程:开启机器学习之旅

    2024-07-16 13:44:02       20 阅读
  5. Swift入门笔记

    2024-07-16 13:44:02       20 阅读
  6. 【Linux命令 香橙派AI pro】使用命令连接wifi

    2024-07-16 13:44:02       20 阅读
  7. 常见逻辑漏洞举例

    2024-07-16 13:44:02       24 阅读
  8. Codeforces Round 958 (Div. 2)

    2024-07-16 13:44:02       23 阅读
  9. Python学习笔记

    2024-07-16 13:44:02       23 阅读