火遍全网的Hutool,如何使用Builder模式构建线程池

本文介绍了Builder设计模式在Hutool库中的应用,特别是在创建线程池时的使用。Hutool通过Builder模式简化了线程池的创建过程,提供了链式调用的便利性。文章讨论了Builder模式适用的场景,展示了Hutool线程池Builder的实现,并提及了不同Builder模式的实现方式。通过对Hutool源码的分析,读者可以更好地理解Builder模式的思想并将其应用于自己的代码中。

前言

Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行

Builder 设计模式在作者编码过程中,属于比较常用的模式之一。优秀的设计模式总是会受到广大开发者的青睐,Hutool 也是其中之一

因为上周编写的业务需要用到线程池,就去 Hutool thread 包下看了看,还真有惊喜,学习到了一种之前编码中没用过的 Builder 模式实现

这里必须提一句:设计模式重要的是思想,一种设计模式可能不止一种实现方式

Builder 模式文章大纲如下:

Builder 模式应用场景

Hutool 线程池如何应用 Builder 模式

Builder 模式不同的实现方式

Builder 模式总结

Builder 模式应用场景

Builder 模式作用域:如果类的属性之间有一定的依赖关系或者约束条件(源自设计模式之美),那么就可以考虑使用 Builer 设计模式

我们依照线程池来举例,默认创建的线程池,构造方法最多有七个参数,核心线程数、最大线程数、阻塞队列、线程存活时间...

日常使用创建线程池时,大家想一下为什么要这么设计?一起来看下源码注释中如何解释此行为

线程池之所以设置如此之多的构造参数,是因为对这些参数会有一定规则的校验,如果不满足线程池的规则,将不允许创建线程池,通过抛异常的方式终止程序

终止规则大概有七点,这里列举一

<think>我们正在处理一个关于Hutool线程池使用属性的问题。用户引用了站内关于Hutool版本的说明,但用户的实际需求是关于线程池使用属性的说明。 根据用户的问题,我们需要提供Hutool线程池(主要是通过`ThreadUtil`类)的相关属性说明。Hutool线程池实际上是对JDK线程池的封装,因此属性与JDK线程池类似。 Hutool中创建线程池通常使用`ThreadUtil.newExecutor`方法,该方法返回一个`ExecutorService`实例。我们可以设置的核心属性包括: 1. 核心线程数(corePoolSize) 2. 最大线程数(maxPoolSize) 3. 线程存活时间(keepAliveTime) 4. 时间单位(TimeUnit) 5. 工作队列(BlockingQueue) 6. 线程工厂(ThreadFactory) 7. 拒绝策略(RejectedExecutionHandler) 由于用户要求的是“属性说明”,我们将重点说明创建线程池时可以设置的这些参数。 另外,Hutool还提供了一些便捷方法来创建不同类型的线程池(如newSingleExecutor, newFixedExecutor等),这些方法内部已经设置了一些默认属性。 需要注意的是,Hutool线程池其实就是JDK的线程池,因此属性含义与JDK一致。 下面我们将详细说明这些属性。 </think>### Hutool线程池使用属性说明 Hutool线程池功能主要通过`ThreadUtil`工具类实现,以下是核心属性及其使用说明: #### 1. **核心线程池属性** ```java // 创建自定义线程池 ExecutorService executor = ThreadUtil.newExecutor( int corePoolSize, // 核心线程数(长期保留的线程) int maximumPoolSize, // 最大线程数 long keepAliveTime, // 非核心线程空闲存活时间(单位:毫秒) BlockingQueue<Runnable> workQueue // 任务队列 ); ``` - **corePoolSize**:线程池维护的最小线程数,即使空闲也不会被回收 - **maximumPoolSize**:线程池允许的最大线程数(当队列满时创建新线程) - **keepAliveTime**:非核心线程空闲超时时间(超过此时间将被回收) - **workQueue**:任务队列类型(常用`LinkedBlockingQueue`) #### 2. **预定义线程池方法** ```java // 固定大小线程池(无界队列) ExecutorService fixedExecutor = ThreadUtil.newFixedExecutor(int nThreads); // 单线程池(任务按顺序执行) ExecutorService singleExecutor = ThreadUtil.newSingleExecutor(); // 可缓存线程池(自动回收空闲线程) ExecutorService cachedExecutor = ThreadUtil.newExecutor(); ``` #### 3. **特殊功能属性** ```java // 设置全局异步线程池(影响所有Hutool异步操作) ThreadUtil.setGlobalExecutor(ExecutorService executor); // 创建调度线程池(定时任务) ScheduledExecutorService scheduledExecutor = ThreadUtil.createScheduledExecutor( int corePoolSize, ThreadFactory threadFactory ); ``` #### 4. **使用示例** ```java // 创建固定线程池(核心=2,最大=5,队列容量=10) ExecutorService pool = ThreadUtil.newExecutor(2, 5, 1000, new ArrayBlockingQueue<>(10)); // 提交任务 pool.execute(() -> { Console.log("任务执行中..."); }); // 优雅关闭(等待现有任务完成) ThreadUtil.shutdownAndAwaitTermination(pool, 60, TimeUnit.SECONDS); ``` > **注意事项**: > 1. 默认使用`Executors.newThreadExecutor()`创建线程池[^1] > 2. 推荐显式指定队列类型避免`OOM`(如`new ArrayBlockingQueue<>()`) > 3. 定时任务需使用`createScheduledExecutor`而非普通线程池 > 4. Hutool 5.7.16+ 新增`Builder`模式创建线程池(链式配置属性)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值