酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]