文章目录
Java 提供了多种异步编程工具,其中 Callable
和 FutureTask
是两个核心组件。它们能够帮助开发者高效地处理耗时任务,并获取任务执行结果,同时避免阻塞主线程。本文将详细介绍 Callable
和 FutureTask
的基本原理、使用方法以及实际应用场景。
一、Callable 与FutureTask 的基本原理
callable可以返回结果,FutureTask等待线程执行并拿到结果
1.什么是 Callable?
Callable
是 Java 提供的一个接口,表示可以返回结果的任务。与 Runnable
不同,Callable
可以返回任务执行的结果,并且能够抛出异常。
2.Callable 的核心特点
- 返回结果:
Callable
的call()
方法可以返回一个结果。 - 抛出异常:
call()
方法可以抛出异常,便于处理任务执行中的错误。 - 与线程池结合:通常与
ExecutorService
结合使用,提交任务并获取结果。
1.什么是 FutureTask?
FutureTask
是 Future
接口的一个实现类,用于表示异步计算的结果。它可以包装 Callable
或 Runnable
任务,并提供以下功能:
- 检查任务是否完成。
- 获取任务的结果(如果任务未完成,会阻塞直到任务完成)。
- 取消任务的执行。
2.FutureTask 的核心特点
- 实现 Future 和 Runnable:既可以作为任务执行,又可以获取任务结果。
- **包装 Callable 或 Runnable 任务。
- 线程安全:内部实现了线程安全的机制,确保多线程环境下的正确性。
二、FutureTask包装Callable
以下演示如何使用 Callable
和 FutureTask
执行异步任务并获取结果。
1. 定义 Callable 任务
首先,定义一个实现 Callable
接口的任务类:
import java.util.concurrent.Callable;
public class MyCallableTask implements Callable<String> {
@Override
public