- 核心线程数(Core Pool Size):线程池中最小的线程数量。即使线程池中没有任务要执行,核心线程也会一直存在,不会被销毁。
- 最大线程数(Maximum Pool Size):线程池中最大的线程数量。当任务数量超过核心线程数时,线程池会创建新的线程,直到达到最大线程数。
- 空闲线程存活时间(Keep-Alive Time):当线程池中的线程数量超过核心线程数,且空闲时间达到指定时间时,多余的线程会被销毁,保持线程池的大小不超过核心线程数。
- 任务队列(Work Queue):用于保存待执行的任务的队列。当线程池中的线程都在执行任务且任务数量达到最大线程数时,新提交的任务会被放入任务队列中等待执行。
拒绝策略(Rejected Execution Handler)。拒绝策略定义了当线程池已满并且任务队列也已满时,如何处理新提交的任务。
/** * @document: 编写使用自定义参数创建 Java 线程池 * @Author:SmallG * @CreateTime:2023/8/21+18:51 */ public class CustomThreadPool { public static void main(String[] args) { //定义线程池参数 int corePoolSize = 3; // 核心线程数 int maximumPoolSize = 20; // 最大线程数 long keepAliveTime = 20; //空闲线程存活时间 int queueCapacity = 50; //任务队列 //创建自定义线程 ThreadPoolExecutor executor = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingDeque<>(queueCapacity), new ThreadFactoryBuilder().setNameFormat("Worker-%d").build(), new ThreadPoolExecutor.AbortPolicy() ); //向线程池提交任务 for (int i = 1; i <= 50; i++) { final int taskId = i; executor.submit(() -> { System.out.println(Thread.currentThread().getName() + " is running task" + taskId); }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } //关闭线程池 executor.shutdown(); } }
最后修改:2023 年 08 月 22 日
© 允许规范转载