Guava的ratelimiter设置每秒产生一个令牌,模拟十个并发,然后tryAcquire延迟一秒,为什么消费了三个令牌?
问题描述:
Guava的ratelimiter设置每秒产生一个令牌,模拟十个并发,然后tryAcquire延迟一秒,为什么消费了三个令牌?
答
不是一秒拿一个吧,是tryAcquire(timeout,单位),表示最多等待timeout单位的时间去获取一个令牌,超时的话就不继续等待了,你设置1s的等待时间的话可以看到第一次获取到令牌和第最后一次获取到令牌的时间差是1s,其它在等待的线程等待1s没有获取到令牌后就走else逻辑了