Callable与Future结合可实现异步任务执行并获取结果。1. Callable是泛型接口,call()方法能返回值并抛出异常;2. Future代表异步计算结果,提供get()、isDone()、cancel()等方法控制任务;3. 通过ExecutorService提交Callable任务获得Future对象,调用get()阻塞获取结果或设超时;4. 适用于批量请求、并行处理等需返回值的并发场景,注意异常处理与线程池管理。

在Java中,Callable 和 Future 结合使用可以实现异步任务执行并获取返回结果。与 Runnable 不同,Callable 可以返回结果,也能抛出异常,配合 Future 可以检查任务是否完成、获取结果或取消任务。
Callable 是一个泛型接口,定义了一个 call() 方法,该方法可以返回指定类型的值,并能抛出异常:
public interface Callable<T> {
T call() throws Exception;
}
Future 代表异步计算的结果,提供了以下关键方法:
结合线程池(ExecutorService)提交 Callable 任务,返回 Future 对象进行控制:
立即学习“Java免费学习笔记(深入)”;
import java.util.concurrent.*;
public class CallableFutureExample {
public static void main(String[] args) {
// 创建线程池
ExecutorService executor = Executors.newSingleThreadExecutor();
// 定义 Callable 任务
Callable<Integer> task = () -> {
System.out.println("任务开始执行...");
Thread.sleep(2000);
return 42; // 模拟计算结果
};
// 提交任务,返回 Future
Future<Integer> future = executor.submit(task);
try {
// 主线程做其他事
System.out.println("主线程继续执行...");
// 获取结果(会阻塞)
Integer result = future.get(); // 或使用超时版本
System.out.println("任务结果:" + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
}
}
适合用于需要并发执行多个耗时任务并汇总结果的场景,例如:
使用 get() 时注意可能引发的阻塞,合理设置超时时间避免程序挂起。
基本上就这些,Callable + Future 提供了比 Runnable 更灵活的任务控制能力,是 Java 并发编程中的常用组合。不复杂但容易忽略细节,比如异常处理和线程池管理。
以上就是如何利用Java实现Callable和Future结合使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号