一个rate limiter包含了最高的许可数量,即可执行的最高速率。
每个acquire()都会堵塞直到获取许可,获取许可则许可数量减一。
Rate limiter 与 Semaphore区别
- Rate limiter 限制的是速率
- Semaphore限制的是并发数
RateLimiter使用方法
一个RateLimiter一般直接按速率定义
例1:每秒2速率限制执行
final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
void submitTasks(List<Runnable> tasks, Executor executor) {
for (Runnable task : tasks) {
rateLimiter.acquire(); // may wait
executor.execute(task);
}
}}
例2:每秒5kb处理数据
final RateLimiter rateLimiter = RateLimiter.create(5000.0); // rate = 5000 permits per second
void submitPacket(byte[] packet) {
rateLimiter.acquire(packet.length);
networkService.send(packet);
}}