java队列实现限流,java中应对高并发的两种策略
目的:提高可用性
通過ExecutorService實現(xiàn)隊列泄洪
//含有20個線程的線程池
private ExecutorService executorService = Executors.newFixedThreadPool(20);
將有并發(fā)壓力的下游代碼放入到線程池的submit方法中,如下:
//同步調(diào)用線程池的submit方法 簡單實現(xiàn) 擁塞窗口為20的隊列泄洪(一個服務(wù)器同一時間只能處理20個請求,其他請求隊列等待)
Future future = executorService.submit(new Callable() {
//此處調(diào)用有并發(fā)壓力的下游接口
}
return null;
}
});
try {
//獲取任務(wù)的執(zhí)行結(jié)果
future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
通過Guava RateLimit 負(fù)載均衡的情況下,在單機內(nèi)部實現(xiàn)限流
private RateLimiter orderCreateRateLimiter = RateLimiter.create(300);//限制300tps
在方法入口內(nèi)加上以下代碼:
//入口處限流
if(!orderCreateRateLimiter.tryAcquire()){
//拋出異常;
}
最后:
這里只簡單描述了如何最簡單的使用,降低高并發(fā)對系統(tǒng)的壓力,沒有剖析內(nèi)部源碼實現(xiàn),望諒解
標(biāo)簽:20,應(yīng)對,隊列,submit,并發(fā),限流,線程,java
來源: https://www.cnblogs.com/wuba/p/11516985.html
總結(jié)
以上是生活随笔為你收集整理的java队列实现限流,java中应对高并发的两种策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查询2021高考成绩位次,云南一分一段表
- 下一篇: html中电子邮件怎么写,谈html m