测试使用guava RateLimiter工具时动态修改令牌的方法(java)

初始化一个限流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());
            }
        }

    }

猜你喜欢

转载自blog.csdn.net/Mint6/article/details/130596799
今日推荐