(1)当线程池关闭后,新来的任务就会被拒绝;
(2)当线程池的最大线程数、队列容量都有接线,并且都满了;继续添加任务时就会拒绝;
(1)AbortPolicy策略;
这种策略是,直接抛出一个异常;比如上面演示的抛出RejectedExecutionException异常;
(2)DiscardPolicy策略;
这种策略,会默默的把新来的这个任务给丢弃;我们不会得到通知;
(3)DiscardOldestPolicy策略;
这种策略,会把队列中存在时间最久的那个任务给丢弃掉,以便给新来的任务腾位置;
(4)CallerRunsPolicy策略;
这种策略下,因为线程池已经无法接纳新的任务了,那么谁提交的这个任务,谁就去跑这个业务;
比如,主线程向线程池提交了一个任务,线程池已经不能接纳这个任务了,那么此时就会让这个提交任务的主线程去执行这个任务;
这种策略有两点好处:(1)这种策略,避免了业务损失;(2)可以让任务提交的速度降低下来,比如主线程提交的任务被打回来后,主线程就必须执行完这个被打回来的任务后,才能够向线程池提交下一个任务,而这就相当于给了线程池一个缓冲的时间;