java FutureTask 等待异步执行结果
时间: 2024-02-13 17:05:52 浏览: 72
Java中,可以使用FutureTask类来等待异步执行结果。具体步骤如下:
1. 定义一个Callable接口的实现类,用于执行需要获取结果集的操作,并返回结果。
2. 创建一个FutureTask对象,将Callable实现类实例作为参数传递给FutureTask构造函数。
3. 使用Executor框架(例如ThreadPoolExecutor)来执行FutureTask对象,异步执行操作并返回Future对象。
4. 在主线程中,使用Future.get()方法获取异步操作的结果。该方法会阻塞当前线程,直到异步操作完成并返回结果。
下面是一个简单的示例代码:
```java
import java.util.concurrent.*;
public class FutureTaskExample {
public static void main(String[] args) throws Exception {
// 创建一个Callable实现类的实例
Callable<Integer> task = new Callable<Integer>() {
public Integer call() {
// 模拟异步操作
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 100;
}
};
// 创建FutureTask对象,将Callable实现类实例作为参数传递给FutureTask构造函数
FutureTask<Integer> futureTask = new FutureTask<Integer>(task);
// 创建线程池并执行FutureTask对象
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(futureTask);
// 在主线程中,使用Future.get()方法获取异步操作的结果
Integer result = futureTask.get();
System.out.println("异步操作的结果是:" + result);
}
}
```
在上面的示例代码中,创建了一个Callable实现类的实例,并将其传递给FutureTask构造函数。然后,通过线程池异步执行FutureTask对象,并在主线程中使用Future.get()方法获取异步操作的结果。注意,Future.get()方法会阻塞当前线程,直到异步操作完成并返回结果。
阅读全文