在高并发情况下,经常会出现接口或服务不可用的情况,甚至会引发系统崩溃,对于该种情况需要使用限流,当请求数达到一定的并发数,就进行服务降级、拒绝、等待等。常见的限流算法是计数器限流算法、漏桶算法、令牌桶算法。
1. 计数器限流算法:主要用来限制总并发数,如数据库连接池大小、程序访问并发数、线程池大小等都是使用计数器算法。
package com.test;
public class CountRateLimiterDemo1 {
private static AtomicInteger count = new AtomicInteger(0);
public static void exec() {
if (count.get() >= 5) {
System.out.println("请求用户过多,请稍后在试!"+System.currentTimeMillis()/1000);
} else {
count.incrementAndGet();
try {
//处理核心逻辑
TimeUnit.SECONDS.sleep(1);
System.out.println("--"+System.currentTimeMillis()/1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
count.decr