线程池自定义拒绝策略
生活随笔
收集整理的這篇文章主要介紹了
线程池自定义拒绝策略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過實現RejectedExecutionHandler接口,自定義一個拒絕策略類,重寫它的rejectedExecution()方法:
public class CustomRejectionHandler implements RejectedExecutionHandler {@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.println(r.toString() + "被拒絕了,執行入庫操作,之后手動補償");} }測試下:
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() + "個任務被執行");try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}});}} }運行結果:
因為核心線程數和最大線程數都是5,而隊列容量是10,所以同一時間最多可接受15個任務,加了個睡眠時間1s,然后可以發現20個任務中只有15個任務被執行,剩下的5個任務都執行了自定義的拒絕策略。
總結
有時候默認提供的拒絕策略無法滿足業務需要,那么就需要開發自己定義符合要求的拒絕策略了。
總結
以上是生活随笔為你收集整理的线程池自定义拒绝策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL日历表-报表常用
- 下一篇: 冲量在线当选中关村数字经济产业联盟理事单