FutureTask是什么
时间: 2025-03-27 07:53:31 浏览: 24
### Java `FutureTask` 类介绍
`FutureTask` 是 Java 中的一个具体类,实现了 `RunnableFuture` 接口。此接口结合了 `Runnable` 和 `Future` 的功能,允许对象作为任务提交给执行器并能够返回结果或抛出异常[^2]。
#### 主要特性
- **可取消的异步计算**:支持通过调用 `cancel()` 方法来终止尚未完成的任务。
- **状态管理**:内部维护着任务的状态变化(如启动、运行中、已完成),这些状态对于外部不可见但影响对外行为。
- **灵活性高**:既可以直接实例化后交给线程池执行,也能独立于任何框架之外自行创建线程执行。
### 使用方法
为了更好地理解如何使用 `FutureTask` ,下面给出一段简单的代码示例:
```java
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class Example {
public static void main(String[] args) throws InterruptedException, ExecutionException {
Callable<Integer> task = () -> {
Thread.sleep(1000); // Simulate a long-running operation.
return 42; // The result of the computation.
};
FutureTask<Integer> futureTask = new FutureTask<>(task);
// Create and start thread to run the FutureTask
Thread workerThread = new Thread(futureTask);
workerThread.start();
System.out.println("Doing some other work...");
Integer result = futureTask.get(); // Wait for completion or timeout/exception
System.out.println("Result from async task: " + result);
}
}
```
这段程序展示了怎样定义一个带有返回值的任务 (`Callable`) 并将其封装到 `FutureTask` 对象里;之后再把这个 `FutureTask` 提供给一个新的工作线程去执行。主线程继续做其他事情直到调用了 `get()` 来等待子线程结束并取回运算的结果。
如果尝试在一个已经完成或者被取消的任务上调用 `get()` 方法,则会立即得到相应的结果或是遇到由之前发生的错误所引发的异常。另外需要注意的是,在某些情况下可能会触发超时异常(`TimeoutException`) 或者中断异常(`InterruptedException`)[^4]。
阅读全文
相关推荐



















