Semaphore
熟称信号量,控制多线程并发请求,不适用于单线程多请求
使用方法:
private static Semaphore apiSemaphore = new Semaphore(100);//同时允许100个线程访问
if (apiSemaphore.tryAcquire()) {
// TODO
//释放许可
apiSemaphore.release();
} else {
// 并发访问超过系统允许上限,请稍后再试!
}
AtomicLong
AtomicLong是作用是对长整形进行原子操作,用于控制请求的访问频率。在java1.8中新加入了一个新的原子类LongAdder,这里我用的1.7,所以不做LongAdder的说明,LongAdder的性能比
AtomicLong好。
使用方法:
private static RateLimiter limiter = RateLimiter.create(2.0); //每秒不超过2个任务被提交
public MappingJacksonJsonView newSearch() {
if (limiter.tryAcquire()) {
//TODO
} else {
//不做处理
}
}