com.google.common.util.concurrent.ListenableFuture使用,给一个实例代码
时间: 2024-11-09 19:20:57 浏览: 18
`com.google.common.util.concurrent.ListenableFuture`是Google库Guava中的一个功能强大的工具,它是一个代表异步计算结果的对象,可以用于处理那些返回值不可立即得到的任务。ListenableFuture允许你注册回调函数,当未来的结果可用时,这些函数会被调用。
使用它的步骤通常包括以下几个步骤:
1. 创建一个`FutureTask`,将耗时操作封装到Callable或者Runnable中:
```java
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
// 执行耗时任务
return "Result";
}
});
```
2. 将任务提交给线程池执行:
```java
executor.execute(futureTask);
```
3. 使用`ListenableFuture`获取结果并注册回调(通过`listen`或`addListener`方法):
```java
final ListenableFuture<String> future = futureTask;
future.addListener(new Runnable() {
@Override
public void run() {
try {
String result = future.get(); // 获取结果
System.out.println("Result: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}, ImmediateExecutor.INSTANCE); // 注册立即执行的回调
```
4. 如果你想阻塞直到结果可用,可以直接调用`get`方法,但它会抛出异常如果任务失败。
阅读全文