Java常见限流用法介绍和实现
import java.util.concurrent.TimeUnit;
public class RateLimiterExample {
public static void main(String[] args) {
// 使用Guava库的RateLimiter实现限流
// 每秒允许2个令牌的通过
RateLimiter rateLimiter = RateLimiter.create(2.0);
// 模拟10个并发任务
for (int i = 0; i < 10; i++) {
final int taskId = i;
// 异步执行任务
new Thread(() -> {
// 从RateLimiter获取许可
rateLimiter.acquire();
try {
// 模拟任务耗时处理
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskId + " executed.");
}).start();
}
// 等待所有任务执行完毕
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这段代码使用了Guava库的RateLimiter
类来实现限流,每秒允许两个任务通过。每个任务通过rateLimiter.acquire()
获取执行的许可。这是一个简单的并发控制示例,展示了如何使用限流来管理资源的访问速率。
评论已关闭