future 和 completablefuture 是 java 中用于并发和多线程的工具。future 表示异步计算结果,提供 get() 方法阻塞线程获取结果。completablefuture 扩展了 future,提供更丰富的功能,如组合计算、处理异常和使用回调函数。

Java 函数的并发和多线程:使用 Future 和 CompletableFuture
概述
Future 和 CompletableFuture 是 Java 8 中引入的并发工具,用于处理异步操作和并发任务。它们允许您在不阻塞主线程的情况下执行长时间运行的操作,从而提高应用程序的性能和响应能力。
立即学习“Java免费学习笔记(深入)”;
Future
Future 是一个表示异步计算结果的对象。它提供了一个方法 get(),用于阻塞当前线程直到结果可用。您还可以使用 isDone() 方法来检查计算是否完成。
CompletableFuture
CompletableFuture 是 Future 的扩展,提供了更丰富的功能。它允许您组合异步计算,处理异常,并使用回调函数。
实战案例
考虑以下示例,使用 Future 来异步加载文件:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FileLoader {
public static void main(String[] args) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> future = executorService.submit(() -> {
// 异步加载文件
return loadFile("file.txt");
});
// 继续执行其他任务,而不阻塞当前线程
// ...
// 当需要结果时,再阻塞主线程获取结果
String result = future.get();
}
private static String loadFile(String filePath) {
// 模拟文件加载操作
return "File contents";
}
}在这个示例中,我们使用 ExecutorService 创建了一个线程池,然后使用 submit() 提交了一个异步任务,该任务负责加载文件。主线程继续执行其他任务,而不阻塞等待文件加载完成。最后,当需要文件内容时,我们再调用 get() 从 Future 中获取结果。
使用 CompletableFuture
以下示例展示了如何使用 CompletableFuture 来组合异步计算:
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) {
// 定义第一个异步计算
CompletableFuture<Integer> firstResult = CompletableFuture.supplyAsync(() -> {
// 计算第一个结果
return 5;
});
// 定义第二个异步计算
CompletableFuture<Integer> secondResult = CompletableFuture.supplyAsync(() -> {
// 计算第二个结果
return 10;
});
// 组合两个计算,将它们的结果相加
CompletableFuture<Integer> combinedResult = firstResult.thenCombine(secondResult, (x, y) -> x + y);
// 获取最终结果
int result = combinedResult.get();
}
}在这个示例中,我们使用 CompletableFuture#supplyAsync() 创建了两个异步计算。然后,我们使用 CompletableFuture#thenCombine() 将它们组合起来,将它们的结果相加。最后,我们使用 CompletableFuture#get() 获取最终结果。
总之,Future 和 CompletableFuture 是处理异步操作和并发任务的强大工具。使用这些工具可以提高应用程序的性能和响应能力,从而创建更有效和可扩展的代码。
以上就是Java函数的并发和多线程中如何使用Future和CompletableFuture?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号