您的当前位置:首页正文

线程池7:线程池拒绝任务的两个时机;线程池拒绝任务的四种策略简介(AbortPolicy,DiscardPolicy,DiscardOldestPolicy,CallerRunsPolicy;);

2024-11-29 来源:个人技术集锦


一:拒绝任务的时机;

(1)当线程池关闭后,新来的任务就会被拒绝;

(2)当线程池的最大线程数、队列容量都有接线,并且都满了;继续添加任务时就会拒绝;


二:拒绝的策略;

(1)AbortPolicy策略;

这种策略是,直接抛出一个异常;比如上面演示的抛出RejectedExecutionException异常;

(2)DiscardPolicy策略;

这种策略,会默默的把新来的这个任务给丢弃;我们不会得到通知;

(3)DiscardOldestPolicy策略;

这种策略,会把队列中存在时间最久的那个任务给丢弃掉,以便给新来的任务腾位置;

(4)CallerRunsPolicy策略;

这种策略下,因为线程池已经无法接纳新的任务了,那么谁提交的这个任务,谁就去跑这个业务;

比如,主线程向线程池提交了一个任务,线程池已经不能接纳这个任务了,那么此时就会让这个提交任务的主线程去执行这个任务;

这种策略有两点好处:(1)这种策略,避免了业务损失;(2)可以让任务提交的速度降低下来,比如主线程提交的任务被打回来后,主线程就必须执行完这个被打回来的任务后,才能够向线程池提交下一个任务,而这就相当于给了线程池一个缓冲的时间;

显示全文