Java实战:巧用自定义线程池精准控制线程总数
在Java中,我们可以使用`ThreadPoolExecutor`类来创建自定义线程池,并通过设置核心线程数和最大线程数来控制线程总数。以下是一个简单的例子: ```java import java.util.concurrent.*; public class CustomThreadPool { private final int corePoolSize; // 核心线程数 private final int maximumPoolSize; // 最大线程数 private final ExecutorService executor; public CustomThreadPool(int corePoolSize, int maximumPoolSize) { this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.executor = new ThreadPoolExecutor( corePoolSize, // 核心线程数 maximumPoolSize, // 最大线程数 60L, // 空闲线程存活时间,单位为秒 TimeUnit.SECONDS, // 时间单位 new ArrayBlockingQueue<>(maximumPoolSize), // 阻塞队列 new NamedThreadFactory("CustomThreadPool"), // 线程工厂 new ThreadPoolExecutor.CallerRunsPolicy() // 当线程池已满,新任务直接在调用者线程执行 ); } public void execute(Runnable task) { executor.execute(task); } public void shutdown() { executor.shutdown(); } public static void main(String[] args) { CustomThreadPool customThreadPool = new CustomThreadPool(5, 10); // 创建一个核心线程数为5,最大线程数为10的线程池 for (int i = 0; i < 20; i++) { // 提交20个任务 customThreadPool.execute(() -> { System.out.println("Task " + Thread.currentThread().getName() + " is running..."); try { Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } }); } // 等待所有任务完成 try { customThreadPool.shutdown(); if (!customThreadPool.awaitTermination(60, TimeUnit.SECONDS)) { customThreadPool.shutdownNow(); // 如果60秒内没有完成,强制停止 } } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在这个例子中,我们创建了一个`CustomThreadPool`类,它有一个核心线程数和最大线程数。当我们提交任务给线程池时,如果线程池中有空闲的线程,它会立即执行;如果没有,就会等待直到有线程空闲或者达到最大线程数。`shutdown()`方法用于关闭线程池,`awaitTermination()`方法用于等待所有任务完成。 ######[AI写代码神器 | 581点数解答 | 2024-04-03 18:22:10]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)424
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)328
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1207
- Android开发自定义 Handler :七大策略有效规避内存泄漏!(百度文心 | 526点数解答 | 2023-11-09 17:34:21)302
- 数字化制图综合平台:助力企业转型,推动烟草物流图纸智能化设计 (字节豆包 | 490点数解答 | 2024-10-30 20:30:29)156
- 数字化制图综合平台:引领烟草物流及多领域设计革新 在企业数字化转型的时代浪潮中,数字化制图技术创新应用成为产业升级与提升竞争力的关键。企业对高效、精准、智能化设计解决方案需求迫切,构建集二维到三维正逆向工程快捷化、干涉检测可视化、设备明细数据提取自动化以及设备模块模型库于一体的综合平台意义重大。 此平台集成先进数字化制图工具与智能算法,可实现二维设计到三维建模的无缝转换,大大缩短设计周期。正逆向工程能快速切换,满足不同场景设计需求。内置干涉检测功能可实时监测设计潜在冲突,保障设计方案可行与安全。设备明细数据自动提取提高设计准确性与效率。设备模块模型库为设计师提供丰富资源,支持设计标准化与模块化,加速项目推进。 整体来看,该综合平台的应用极大促进了烟草物流行业及更广泛领域的技术创新与效率提升。在烟草物流方案图纸智能化设计中,它提升了图纸设计效率与质量,使设计工作更加高效、精准。对于企业而言,这一平台带来显著竞争优势,能帮助企业在数字化转型中脱颖而出,在激烈的市场竞争中占据有利地位,推动整个行业向更高效、更智能的方向发展。 (阿里通义 | 216点数解答 | 2024-10-30 20:30:51)186
- C51 编程:外部中断 0 边沿触发控制 P2 口 8 个 LED 依次点亮(字节豆包 | 41点数解答 | 2025-06-22 11:25:54)159
- 8051 单片机:用外部中断 0 边沿触发实现 P2 口 8 个 LED 依次点亮(附代码与详解) (字节豆包 | 538点数解答 | 2025-06-22 11:26:15)135
- C51实现外部中断0边沿触发,让P2口8个LED依次点亮的程序详解(DeepSeek | 400点数解答 | 2025-06-22 21:21:28)117
- C51 程序:利用外部中断 0 边沿触发实现 P2 口 8 个 LED 依次点亮及代码分析(DeepSeek | 228点数解答 | 2025-06-22 23:18:42)171
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)336
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)436