技术文摘
Guava并发之ListenableFuture与RateLimiter示例
2024-12-31 17:43:54 小编
Guava并发之ListenableFuture与RateLimiter示例
在Java并发编程中,Guava库提供了一些强大的工具,其中ListenableFuture和RateLimiter尤为引人注目。它们分别在异步编程和限流控制方面有着出色的表现。
ListenableFuture是对传统Future的扩展,它允许我们为异步操作的完成添加回调函数。传统的Future在获取结果时会阻塞当前线程,直到任务完成。而ListenableFuture则可以在任务完成时自动触发回调,使得我们的代码更加灵活和高效。
下面是一个简单的ListenableFuture示例。假设我们有一个耗时的任务,比如从远程服务器获取数据:
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
public class ListenableFutureExample {
public static void main(String[] args) {
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
ListenableFuture<String> future = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
// 模拟耗时操作
Thread.sleep(2000);
return "数据获取成功";
}
});
future.addListener(() -> {
try {
System.out.println(future.get());
} catch (Exception e) {
e.printStackTrace();
}
}, executorService);
}
}
RateLimiter则用于限制操作的执行速率。在某些场景下,我们可能不希望某些操作过于频繁地执行,比如访问外部接口时避免短时间内大量请求导致服务过载。
示例代码如下:
import com.google.common.util.concurrent.RateLimiter;
public class RateLimiterExample {
public static void main(String[] args) {
RateLimiter rateLimiter = RateLimiter.create(1.0);
for (int i = 0; i < 10; i++) {
rateLimiter.acquire();
System.out.println("执行任务:" + i);
}
}
}
在上述代码中,我们创建了一个每秒允许执行一次操作的RateLimiter。通过调用acquire方法,当操作超过速率限制时,线程会阻塞等待。
Guava的ListenableFuture和RateLimiter为我们的并发编程提供了便利和强大的功能。合理使用它们可以提高程序的性能和稳定性。
- 怒学Python:第一篇之了解Python
- MySQL 学习笔记第一篇
- 怒学Python:第三篇 结构控制
- MySQL学习笔记(三):表数据的增删改查
- MySQL学习笔记(二):表结构的增删改查
- 《python基础教程》关于条件语句与循环语句的笔记
- MySQL 中如何判断中文字符
- MySQL学习笔记(四):探讨数据库索引
- 以 innodb 为例谈建立索引的原则
- Python快速教程(补充篇01):Python序列方法
- Python快速教程(补充篇04):探索Python的发展历程
- MySQL数据备份中逻辑备份的恢复方式
- MySQL数据备份:逻辑备份方法
- MySQL 数据库备份的应用场景
- MySQL 授权访问策略