| AbortPolicy:该策略直接抛出异常,阻止系统正常工作 |
| CallerRunsPolicy:只要线程池没有关闭,该策略直接在调用者线程中,执行当前被丢弃的任务 |
| DiscardPolicy:直接把任务丢弃 |
| DiscardOldestPolicy:丢弃最老的一个请求(任务队列里面的第一个),再尝试提交任务 |
| |
| |
| 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()); |
| } |
| } |



| import java.util.concurrent.RejectedExecutionHandler; |
| import java.util.concurrent.ThreadPoolExecutor; |
| |
| public class CustomPolicy implements RejectedExecutionHandler { |
| @Override |
| public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { |
| |
| System.out.println("线程池满了"); |
| } |
| } |
| |
| # 测试使用 |
| public class ThreadPoolDemo { |
| |
| public static void main(String[] args) throws ExecutionException, InterruptedException { |
| |
| LinkedBlockingQueue<Runnable> objects = new LinkedBlockingQueue<>(10); |
| |
| ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 20, 3L, |
| TimeUnit.SECONDS, objects, new CustomPolicy()); |
| |
| threadPoolExecutor.prestartAllCoreThreads(); |
| |
| for (int i = 0; i < 50; i++) { |
| threadPoolExecutor.submit(()->{ |
| try { |
| Thread.sleep(2000L); |
| } catch (InterruptedException e) { |
| e.printStackTrace(); |
| } |
| System.out.println(threadPoolExecutor.getActiveCount()); |
| }); |
| } |
| } |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
2021-05-16 真实机中安装CentOS7(一)