赞
踩
- package com.mmall.concurrency.example.rateLimiter;
-
- import com.google.common.util.concurrent.RateLimiter;
- import lombok.extern.slf4j.Slf4j;
- import java.util.concurrent.TimeUnit;
-
- @Slf4j
- public class RateLimiterExample1 {
-
- // 因为创建的时候规定 1 秒 5 个令牌,即换算成 1 个令牌 200 毫秒。
- private static RateLimiter rateLimiter = RateLimiter.create(5);
-
- public static void main(String[] args) throws Exception {
-
- for (int index = 0; index < 100; index++) {
- if (rateLimiter.tryAcquire(190, TimeUnit.MILLISECONDS)) {
- handle(index);
- }
- }
- }
-
- private static void handle(int i) {
- log.info("{}", i);
- }
- }
分析
tryAcquire:在规定时间内(n ms),如果时间赶不上,则该次阻塞将被丢弃,所以可能会产生一个都没有输出或部分输出。
- package com.mmall.concurrency.example.rateLimiter;
-
- import com.google.common.util.concurrent.RateLimiter;
- import lombok.extern.slf4j.Slf4j;
- import java.util.concurrent.TimeUnit;
-
- @Slf4j
- public class RateLimiterExample2 {
-
- private static RateLimiter rateLimiter = RateLimiter.create(5);
-
- public static void main(String[] args) throws Exception {
-
- for (int index = 0; index < 100; index++) {
- rateLimiter.acquire();
- handle(index);
- }
- }
-
- private static void handle(int i) {
- log.info("{}", i);
- }
- }
- // 输出
- 18:04:03.190 [main] INFO c.m.c.example.rateLimiter.test9 - 0
- 18:04:03.387 [main] INFO c.m.c.example.rateLimiter.test9 - 1
- 18:04:03.587 [main] INFO c.m.c.example.rateLimiter.test9 - 2
- 18:04:03.787 [main] INFO c.m.c.example.rateLimiter.test9 - 3
- 18:04:03.988 [main] INFO c.m.c.example.rateLimiter.test9 - 4
- 18:04:04.188 [main] INFO c.m.c.example.rateLimiter.test9 - 5
- 18:04:04.388 [main] INFO c.m.c.example.rateLimiter.test9 - 6
- 18:04:04.588 [main] INFO c.m.c.example.rateLimiter.test9 - 7
- 18:04:04.789 [main] INFO c.m.c.example.rateLimiter.test9 - 8
- 18:04:04.988 [main] INFO c.m.c.example.rateLimiter.test9 - 9
- ...
分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。