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