通过 Callable 和 Future 创建线程
时间: 2024-10-29 12:09:09 浏览: 6
在Java并发编程中,`Callable`和`Future`接口一起用于创建异步任务,并允许我们对这些任务的结果进行访问。它们的区别在于,`Runnable`仅表示任务,而`Callable`代表任务并能返回一个值,同时它还可以处理异常。
1. **Callable接口**:
- `Callable<T>`是一个函数式接口,它有一个泛型参数T,代表任务的返回值类型。
- 它提供了`call()`方法来执行计算并返回结果,类似于`run()`方法,但它可以返回一个值。
2. **Future接口**:
- `Future<V>`接口表示一个异步计算的结果,其中V是对`Callable`中返回值类型的引用。
- 使用`Future`,你可以获取`Callable`的结果,或者判断任务是否完成以及是否已中断。
创建线程流程如下:
```java
// 创建Callable任务
Callable<String> callable = () -> {
try {
// 执行耗时任务
return "Result from Callable";
} catch (Exception e) {
throw new RuntimeException(e);
}
};
// 使用ExecutorService执行任务并获取Future
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(callable);
// 等待任务完成,然后获取结果
String result;
try {
result = future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown(); // 关闭ExecutorService
// 之后你可以从result中获取到Callable任务的执行结果
```
阅读全文