RateLimiter是一种用于控制某种资源或服务的访问速率的工具,常用于限流。它可以防止过多的请求同时发送,防止服务器负载过高,保证服务的稳定性和可用性。
比如,你可以创建一个每秒只允许5个操作的RateLimiter:
RateLimiter limiter = RateLimiter.create(5.0); // 每秒不超过5个请求
然后在你需要限制的操作前调用limiter.acquire():
void submitTasks(List<Runnable> tasks) {
//tasks为实际执行条件,可以改为其他内容,甚至暴力方式 while(true)也行
for (Runnable task : tasks) {
limiter.acquire(); // 可能会阻塞,直到获取一个许可(流量分配许可)
//建议使用异步调用
CompletableFuture<Void> future = CompletableFuture.runAsync(()->{
//do......
});
}
}
Limiter.acquire()方法会阻塞,直到RateLimiter有一个可用的许可。这样,即使submitTasks方法被并发调用,也只会有5个任务每秒被执行。