技术文摘
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为我们的并发编程提供了便利和强大的功能。合理使用它们可以提高程序的性能和稳定性。
- Win10无法进入FIFA23的解决之道
- Win10 硬件加速的作用及开启方法
- Win10 系统 GPUinfo 无法使用的原因及解决办法
- Win10 的九个使用技巧方法汇总
- Win10 自带截图工具失灵的解决之道
- Win10 优化设置指南:最全教程
- 解决 Win10 错误代码 0x800701B1 的方法(附详细步骤)
- Win10 Version 22H2 是否为微软 Windows10 最后的功能更新?
- Win10 节电模式如何保持屏幕亮度 实现节能屏幕不暗的办法
- 电脑装 W10 不如 W7 流畅的解决办法:Win10 退回 Win7 系统
- Win10 系统 hosts 文件空白的解决之道
- Win10 错误代码 0xc0000221 的修复办法
- Win10 蓝牙连接音量默认 100 的解决之法
- Win10 卡顿严重的解决办法汇总
- Win10 版本 1909 更新错误 0x800f081f 解决办法