线程池拒绝策略
RejectedExecutionHandler
(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务,这个策略默认是AbortPolicy类下的方法,表示无法处理新任务时抛出的异常。
在JDK1.5中Java线程池框架提供了一下4种策略:
-
AbortPolicy() //直接抛出异常
-
CallerRunsPolicy() //只用调用者所在的线程来运行任务
-
DiscardPolicy() //不处理,不丢弃
-
DiscardOldestPolicy() //d丢弃队列离最近的一个任务,并执行当前任务
实例AbortPolicy
public static void main(String[] args) {
ExecutorService threadPool = new ThreadPoolExecutor(
2, //初始核心数
5, //线程池最大线程数
1L,//判断线程存活时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(3),//阻塞队列容量3
Executors.defaultThreadFactory(),//默认参数就可以
new ThreadPoolExecutor.AbortPolicy());//回收策略
try {
for (int i = 1; i <= 9 ; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + "\t 办理业务");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}