当前位置:   article > 正文

Guava - RateLimiter_ratelimiter.tryacquire(190, timeunit.milliseconds)

ratelimiter.tryacquire(190, timeunit.milliseconds)

案例一 

  1. package com.mmall.concurrency.example.rateLimiter;
  2. import com.google.common.util.concurrent.RateLimiter;
  3. import lombok.extern.slf4j.Slf4j;
  4. import java.util.concurrent.TimeUnit;
  5. @Slf4j
  6. public class RateLimiterExample1 {
  7. // 因为创建的时候规定 1 秒 5 个令牌,即换算成 1 个令牌 200 毫秒。
  8. private static RateLimiter rateLimiter = RateLimiter.create(5);
  9. public static void main(String[] args) throws Exception {
  10. for (int index = 0; index < 100; index++) {
  11. if (rateLimiter.tryAcquire(190, TimeUnit.MILLISECONDS)) {
  12. handle(index);
  13. }
  14. }
  15. }
  16. private static void handle(int i) {
  17. log.info("{}", i);
  18. }
  19. }

分析

tryAcquire:在规定时间内(n ms),如果时间赶不上,则该次阻塞将被丢弃,所以可能会产生一个都没有输出或部分输出。

  • 当 n > 200,可以输出全部
  • 当 n == 200,可以输出部分
  • 当 n < 200,一个都没有

案例二

  1. package com.mmall.concurrency.example.rateLimiter;
  2. import com.google.common.util.concurrent.RateLimiter;
  3. import lombok.extern.slf4j.Slf4j;
  4. import java.util.concurrent.TimeUnit;
  5. @Slf4j
  6. public class RateLimiterExample2 {
  7. private static RateLimiter rateLimiter = RateLimiter.create(5);
  8. public static void main(String[] args) throws Exception {
  9. for (int index = 0; index < 100; index++) {
  10. rateLimiter.acquire();
  11. handle(index);
  12. }
  13. }
  14. private static void handle(int i) {
  15. log.info("{}", i);
  16. }
  17. }
  1. // 输出
  2. 18:04:03.190 [main] INFO c.m.c.example.rateLimiter.test9 - 0
  3. 18:04:03.387 [main] INFO c.m.c.example.rateLimiter.test9 - 1
  4. 18:04:03.587 [main] INFO c.m.c.example.rateLimiter.test9 - 2
  5. 18:04:03.787 [main] INFO c.m.c.example.rateLimiter.test9 - 3
  6. 18:04:03.988 [main] INFO c.m.c.example.rateLimiter.test9 - 4
  7. 18:04:04.188 [main] INFO c.m.c.example.rateLimiter.test9 - 5
  8. 18:04:04.388 [main] INFO c.m.c.example.rateLimiter.test9 - 6
  9. 18:04:04.588 [main] INFO c.m.c.example.rateLimiter.test9 - 7
  10. 18:04:04.789 [main] INFO c.m.c.example.rateLimiter.test9 - 8
  11. 18:04:04.988 [main] INFO c.m.c.example.rateLimiter.test9 - 9
  12. ...

分析

  • 根据输出也可以看到 acquire 方法 1s 正常获取 5 个令牌,符合题意。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/224991
推荐阅读
  

闽ICP备14008679号