ListenableFuture ImmutableList是什么,怎么获取长度
时间: 2024-01-14 12:02:58 浏览: 23
ListenableFuture是Guava框架中的一个接口,它是一个可以监听的异步计算任务,可以用于执行异步操作并在操作完成后获取结果。而ImmutableList是Guava框架中的一个不可变的List实现,它是线程安全的,适合在多线程环境中使用。
要获取ImmutableList的长度,可以使用其size()方法,例如:
```
ImmutableList<String> list = ImmutableList.of("a", "b", "c");
int size = list.size(); // 获取长度,结果为3
```
相关问题
CompletableFuture ListenableFuture
CompletableFuture和ListenableFuture都是对原生JDK中老版Future-Get模式的改进。它们都可以用于异步编程,并提供了更加灵活和强大的功能。
CompletableFuture是在JDK8中引入的,它提供了一套丰富的API来处理异步计算和任务。通过CompletableFuture,我们可以定义异步计算的各种操作,如串行、并行、组合和转换等。它支持回调函数、异常处理、组合操作和线程池等功能。
ListenableFuture是由Google Guava工具包提供的Future扩展类。它与CompletableFuture在一定程度上非常相似,也提供了类似的功能。ListenableFuture支持添加监听器,在异步任务完成时会触发监听器执行相应的操作。
在使用上,CompletableFuture和ListenableFuture的主要区别在于API的设计和语法的风格上有些不同。CompletableFuture提供了更加流畅和易用的API,特别适合与Java 8的函数式编程风格结合使用。而ListenableFuture则更加接近于传统的回调模式,对于使用习惯了Guava的开发者来说更容易上手。
ListenableFuture 用法
ListenableFuture是Guava库中的一个接口,用于异步操作的实现。在Java中,Future接口常常用于异步操作的处理,但是Future的功能比较有限,不能对异步操作进行取消、超时等控制,也无法添加回调函数。而ListenableFuture则提供了更加丰富的功能,可以对异步操作进行更加灵活的处理。
下面是ListenableFuture的用法:
1. 创建ListenableFuture对象
可以通过Guava库中的Futures工具类创建ListenableFuture对象,也可以通过ListenableFutureTask创建。
```
ListenableFuture<String> future1 = Futures.immediateFuture("hello");
ListenableFuture<String> future2 = Futures.submit(() -> "world");
ListenableFutureTask<String> task = ListenableFutureTask.create(() -> "guava");
ListenableFuture<String> future3 = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor())
.submit(task);
```
2. 添加回调函数
可以通过addCallback方法添加回调函数,回调函数会在ListenableFuture执行完成后被调用。addCallback方法接收两个参数,一个是成功的回调函数,一个是失败的回调函数。
```
Futures.addCallback(future1, new FutureCallback<String>() {
@Override
public void onSuccess(String result) {
System.out.println(result);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
});
```
3. 超时控制
可以通过Futures工具类的withTimeout方法对ListenableFuture进行超时控制,如果超时则会抛出TimeoutException异常。
```
ListenableFuture<String> future = Futures.immediateFuture("hello");
try {
String result = Futures.withTimeout(future, 1, TimeUnit.SECONDS, true).get();
System.out.println(result);
} catch (TimeoutException e) {
e.printStackTrace();
}
```
4. 取消操作
可以通过ListenableFuture的cancel方法对异步操作进行取消,同时也可以设置是否中断正在执行的线程。
```
ListenableFuture<String> future = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor())
.submit(() -> {
Thread.sleep(5000);
return "hello";
});
future.cancel(true); // 取消操作并中断线程
```
以上就是ListenableFuture的基本用法,通过使用ListenableFuture可以更加灵活地处理异步操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)