在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()`方法用于等待所有任务完成。 [2024-04-03 18:22:10 | AI写代码神器 | 581点数解答]