线程池自定义拒绝策略
生活随笔
收集整理的這篇文章主要介紹了
线程池自定义拒绝策略
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過實(shí)現(xiàn)RejectedExecutionHandler接口,自定義一個(gè)拒絕策略類,重寫它的rejectedExecution()方法:
public class CustomRejectionHandler implements RejectedExecutionHandler {@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.println(r.toString() + "被拒絕了,執(zhí)行入庫操作,之后手動(dòng)補(bǔ)償");} }測(cè)試下:
public class SpringbootApplication {private static AtomicInteger atomicInteger = new AtomicInteger(1);public static void main(String[] args) throws Exception {CustomRejectionHandler customRejectionHandler = new CustomRejectionHandler();ExecutorService executorService = new ThreadPoolExecutor(5, 5, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10), customRejectionHandler);for (int i = 0; i < 20; i++) {executorService.submit(new Runnable() {@Overridepublic void run() {System.out.println("第" + atomicInteger.getAndIncrement() + "個(gè)任務(wù)被執(zhí)行");try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}});}} }運(yùn)行結(jié)果:
因?yàn)楹诵木€程數(shù)和最大線程數(shù)都是5,而隊(duì)列容量是10,所以同一時(shí)間最多可接受15個(gè)任務(wù),加了個(gè)睡眠時(shí)間1s,然后可以發(fā)現(xiàn)20個(gè)任務(wù)中只有15個(gè)任務(wù)被執(zhí)行,剩下的5個(gè)任務(wù)都執(zhí)行了自定義的拒絕策略。
總結(jié)
有時(shí)候默認(rèn)提供的拒絕策略無法滿足業(yè)務(wù)需要,那么就需要開發(fā)自己定義符合要求的拒絕策略了。
總結(jié)
以上是生活随笔為你收集整理的线程池自定义拒绝策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL日历表-报表常用
- 下一篇: kali系统---DNS收集分析之dns