项目场景:
- 多个查询SQL一起使用
- 微服务模块,互相调用
- 什么场景会使用多线程?平常的学习和实际当中,你是怎么用到的?
问题描述
最开始学习编程的时候,我们写的程序代码,都是**顺序执行**
的,有时候,为了提高程序的执行速度,就衍生了相关的方案
原因分析:
解决方案:
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的 打印输出结果,这也就证实了,异步编程的概念