1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| package com.example.login;
import com.google.common.util.concurrent.RateLimiter;
import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
public class TestGuava { public static void main(String[] args) { RateLimiter limiter = RateLimiter.create(3); ExecutorService pool = Executors.newFixedThreadPool(10); for(int i =0; i <20; i++) { limiter.acquire(); pool.execute(() -> { System.out.println(new Date().toLocaleString()); }); } pool.shutdown(); } } public class GuavaRateLimiter { public static ConcurrentHashMap<String, RateLimiter> resourceRateLimiter = new ConcurrentHashMap<String, RateLimiter>();
static { createResourceRateLimiter("order", 5); }
public static void createResourceRateLimiter(String resource, double qps) { if (resourceRateLimiter.contains(resource)) { resourceRateLimiter.get(resource).setRate(qps); } else { RateLimiter rateLimiter = RateLimiter.create(qps); resourceRateLimiter.putIfAbsent(resource, rateLimiter);
}
}
public static void main(String[] args) { for (int i = 0; i < 50; i++) { new Thread(new Runnable() { @Override public void run() { resourceRateLimiter.get("order").acquire(); System.out.println("执行业务逻辑"+new Date().toLocaleString()); } }).start(); }
} }
|