一种代码示例是使用ExecutorService类的submit()方法提交多个Callable任务,并返回多个Future对象,
然后在主线程中循环调用Future对象的get()方法获取结果,并进行汇总1。
代码如下:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureExample {
public static void main(String[] args) throws Exception {
// 创建一个线程池
ExecutorService executor = Executors.newCachedThreadPool();
// 创建一个列表存放多个Future对象
List<Future<Double>> futureList = new ArrayList<>();
// 提交多个Callable任务,并返回多个Future对象
for (int i = 0; i < 10; i++) {
Future<Double> future = executor.submit(new Callable<Double>() {
public Double call() {
// 模拟一个耗时的计算
return Math.random() * 100;
}
});
futureList.add(future);
}
// 在主线程中做其他事情
System.out.println("Doing something else...");
// 创建一个变量存放总和
BigDecimal sum = BigDecimal.ZERO;
// 循环获取异步任务的结果,并进行汇总
for (Future<Double> future : futureList) {
Double result = future.get();
sum = sum.add(new BigDecimal(result));
System.out.println("Result: " + result);
}
// 输出总和
System.out.println("Sum: " + sum);
// 关闭线程池
executor.shutdown();
}
}
另一种代码示例是使用CompletableFuture类,它提供了更多的方法来创建和组合异步任务,并且可以添加回调函数来处理结果或异常2。
代码如下:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) throws Exception {
// 创建一个列表存放多个CompletableFuture对象
List<CompletableFuture<Double>> futureList = new ArrayList<>();
// 使用静态方法supplyAsync创建多个异步任务,并返回多个CompletableFuture对象
for (int i = 0; i < 10; i++) {
CompletableFuture<Double> future = CompletableFuture.supplyAsync(() -> {
// 模拟一个耗时的计算
return Math.random() * 100;
});
futureList.add(future);
}
// 在主线程中做其他事情
System.out.println("Doing something else...");
// 创建一个变量存放总和
BigDecimal sum = BigDecimal.ZERO;
// 循环获取异步任务的结果,并进行汇总
for (CompletableFuture<Double> future : futureList) {
Double result = future.get();
sum = sum.add(new BigDecimal(result));
System.out.println("Result: " + result);
}
// 输出总和
System.out.println("Sum: " + sum);
}
}