令牌桶
原理解析
一个桶,每秒向里面放置n个令牌,当请求来了之后,尝试排队拿取m个令牌,当令牌不足时,轮询等候。
实现代码
public class TestRateLimiter {
public static final SimpleDateFormat sip = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SS");
public static final int THREAD_COUNT = 25;
public static final int MAX_ACQUIRE = 1;
@Test
public void test(){
RateLimiter rateLimiter = RateLimiter.create(5);
Thread[] threads = new Thread[THREAD_COUNT];
for (int i = 0; i < THREAD_COUNT; i++) {
threads[i] = new Thread((Runnable) new RateLimiterThread(rateLimiter),"RateLimiterThread-"+i);
}
for (int i