package com.github.ltsopensource.core.commons.concurrent.limiter; import org.junit.Test; import java.util.concurrent.atomic.AtomicLong; /** * @author Robert HG (254963746@qq.com) on 3/16/16. */ public class RateLimiterTest { static volatile boolean stop = false; @Test public void testRateLimiter() throws InterruptedException { final RateLimiter rateLimiter = RateLimiter.create(4.0); long start = System.nanoTime(); final AtomicLong okNum = new AtomicLong(0); final AtomicLong blockNum = new AtomicLong(0); for (int i = 0; i < 5; i++) { new Thread(new Runnable() { @Override public void run() { while (!stop) { if (rateLimiter.tryAcquire(1)) { okNum.incrementAndGet(); } else { blockNum.incrementAndGet(); } } } }).start(); } Thread.sleep(10 * 1000L); stop = true; System.out.println(System.nanoTime() - start); System.out.println("ok=" + okNum.get()); System.out.println("block=" + blockNum.get()); } }