您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页Java线程池-拒绝策略

Java线程池-拒绝策略

来源:意榕旅游网
Java线程池-拒绝策略

线程池之拒绝策略当线程池中任务队列已满且最⼤线程数maximumPoolSize达到最⼤,此时如果还有任务过来,那么将会触发拒绝策略线程池⼀共内置了四种拒绝策略,线程池默认使⽤AbortPolicy

private static final RejectedExecutionHandler defaultHandler =new AbortPolicy();

ThreadPoolExecutor.AbortPolicy()丢弃任务并抛出RejectedExecutionException异常

public static class AbortPolicy implements RejectedExecutionHandler { public AbortPolicy() { }

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException(\"Task \" + r.toString() + \" rejected from \" + e.toString()); }}

ThreadPoolExecutor.DiscardPolicy()丢弃任务,但是不抛出异常。

public static class DiscardPolicy implements RejectedExecutionHandler { public DiscardPolicy() { }

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { } }

ThreadPoolExecutor.DiscardOldestPolicy()丢弃队列最前⾯的任务,然后重新提交被拒绝的任务,e.getQueue().poll()将最前⾯的任务弹出

public static class DiscardOldestPolicy implements RejectedExecutionHandler { public DiscardOldestPolicy() { }

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { e.getQueue().poll(); e.execute(r); } } }

ThreadPoolExecutor.CallerRunsPolicy()由调⽤线程(提交任务的线程)处理该任务

public static class CallerRunsPolicy implements RejectedExecutionHandler { public CallerRunsPolicy() { }

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { r.run(); } } }

⾃定义拒绝策略当上⾯拒绝策略不能满⾜我们的需求,我们需要⾃定义拒绝策略,只需要实现RejectedExecutionHandler就⾏

package thread.customthreadpool.reject;

import java.util.concurrent.RejectedExecutionException;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;

/**

* ⾃定义拒绝策略 */

public class MyThreadRejectExecutionHandler implements RejectedExecutionHandler { @Override

public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { /**

* 加⼊⾃⼰的处理逻辑 */

throw new RejectedExecutionException(\"请求异常\"); }}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务