初始化一个限流1秒执行1次的RateLimiter,然后在循环模拟是否允许通过的过程中,使用调度线程池,动态修改RateLimiter的rate,查看允许通过的执行次数是否动态增加了
public static void main(String[] args) throws InterruptedException {
RateLimiter rateLimiter1 = RateLimiter.create(1);
ScheduledFuture<?> scheduledFuture =
Executors.newScheduledThreadPool(1).scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
rateLimiter1.setRate(rateLimiter1.getRate()+2);
}
}, 10, 2, TimeUnit.SECONDS);
while (true){
if (!rateLimiter1.tryAcquire(1)) {
System.out.println("获取不到令牌:"+ rateLimiter1.getRate());
Thread.sleep(1000);
} else {
rateLimiter1.acquire(1);
System.out.println("正常通过:"+ rateLimiter1.getRate());
}
}
}