这是ThreadPoolExecutor最后一篇博客 内容是拒绝策略
public static class CallerRunsPolicy implements RejectedExecutionHandler {
public CallerRunsPolicy() { }
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
if (!e.isShutdown()) {
r.run();
}
}
}
这个策略是调用者运行 就是在提交任务的线程里运行 这样提交任务的线程执行任务就会阻塞一段时间 线程池就有了更多时间可以处理任务 实现的逻辑就是调用的是run方法 run方法不开启新线程
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());
}
}
这个策略就是默认的忽略策略 就是抛出异常
public static class DiscardPolicy implements RejectedExecutionHandler {
public DiscardPolicy() { }
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
}
}
这个策略是放弃策略 就是空方法
public static class DiscardOldestPolicy implements RejectedExecutionHandler {
public DiscardOldestPolicy() { }
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
if (!e.isShutdown()) {
e.getQueue().poll();
e.execute(r);
}
}
}
这个是放弃最老的任务的策略
实现逻辑是将workQueue里的最早的任务给剔除 然后执行新任务
至此ThreadPoolExecutor介绍完毕