1.Abort策略:默认策略,新任务提交时直接抛出未检查的异常RejectedExecutionException,该异常可由调用者捕获。java
new ThreadPoolExecutor.AbortPolicy()
2.CallerRuns策略:为调节机制,既不抛弃任务也不抛出异常,而是将某些任务回退到调用者。不会在线程池的线程中执行新的任务,而是在调用exector的线程中运行新的任务。线程
new ThreadPoolExecutor.CallerRunsPolicy()
3.Discard策略:新提交的任务被抛弃。code
new ThreadPoolExecutor.DiscardPolicy()
4.DiscardOldest策略:队列的是“队头”的任务,而后尝试提交新的任务。对头任务被丢弃(不适合工做队列为优先队列场景)队列
new ThreadPoolExecutor.DiscardOldestPolicy()
5.自定义饱和处理策略get
import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; /** * 循环,当队列有空位时,该任务进入队列,等待线程池处理 */ public class TestRejectedExecutionHandler implements RejectedExecutionHandler { public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { try { executor.getQueue().put(r); } catch (InterruptedException e) { e.printStackTrace(); } } }