经测试,1秒内可能出现2倍限制的返回量,望各位大佬指正,本文方案仅供参考
方案1:private LoadingCache方案2:counter = CacheBuilder.newBuilder() .expireAfterWrite(1, TimeUnit.SECONDS) //1秒内 .build(new CacheLoader () { @Override public AtomicLong load(Long seconds) throws Exception { return new AtomicLong(0); } }); //每秒限制次数 public static long permit = 2; public Integer mmm() { long currentSeconds = System.currentTimeMillis() / 1000; long current = 0; try { current = counter.get(currentSeconds).incrementAndGet(); } catch (ExecutionException e) { return -1 } if (current > permit) { return -2 } //todo 逻辑业务 return 1; }
private static Semaphore semaphore = new Semaphore(2);//限制并发个数
public Integer mmm() {
if (!semaphore.tryAcquire()) {
return new Result(ResultCode.REQUEST_OFTEN);
}
try {
//todo 逻辑业务
return 1;
} catch (Exception e) {
return -1;
} finally {
semaphore.release();
}
}



