iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >火遍全网的Hutool使用Builder模式创建线程池的方法
  • 281
分享到

火遍全网的Hutool使用Builder模式创建线程池的方法

2024-04-02 19:04:59 281人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式

前言

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

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

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

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

Builder 模式文章大纲如下:

  1. Builder 模式应用场景
  2. Hutool 线程池如何应用 Builder 模式
  3. Builder 模式不同的实现方式
  4. Builder 模式总结

Builder 模式应用场景


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

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

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

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

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

  1. 核心线程数不可以小于 0
  2. 线程存活时间不可以小于 0
  3. 最大线程数不可以小于等于 0,同时也不可以小于核心线程数
  4. 阻塞队列、线程工厂、拒绝策略参数均不可为空

上述七点有两个作用,其一是为了让核心参数满足线程池运行流程,其二是为了保障运行时的稳定性

小伙伴想一哈线程池创建是不是灰常灰常适合 Builder 模式,构造器函数过多以及属性之间存在依赖关系和约束条件

Hutool Builder 创建线程池


Hutool 线程池相关使用 Builder 设计模式有两处,一个是创建线程池,另一个是创建线程工厂,我们重点围绕线程池说

创建 Hutool 线程池比较简单且优雅,笔者较喜欢这种链式风格,所以抽象公共业务时都会使用此模式,如图所示

这个时候跟下源码,先从 ExecutorBuilder#create 入手,小伙伴就明白 Hutool 是如何玩 Builder 模式了


public static ExecutorBuilder create() {
 return new ExecutorBuilder();
}

What? 自己创建自己?这是要搞啥子

小伙伴想一下,如果你想要对一个类中属性进行约束,前提是不是先应该把属性搞到手

没错,ExecutorBuilder#create 方法返回自己本身,然后通过 set 方法 把数据填充到创建出来的对象上,最后再进行依赖关系整理和条件约束

看一下 ExecutorBuilder#build 方法内部做了什么事情

这里有个知识点,也是B格之一,大家看到 build 方法上有 @Override 注解,证明它是实现了接口方法

Hutool 定义了 Builder 接口,实现此接口即可完成 Builder 模式,泛型 T 代表需要返回的构造对象类型,比如刚才线程池 Builder 泛型就是 ThreadPoolExecutor

在实现 build 方法上调用真正管理依赖和约束的方法 build(ExecutorBuilder builder),将刚才创建好并且已经赋过值的构建对象传入

最后 build(ExecutorBuilder builder) 返回的就是我们所需要的线程池对象,这一块大家可以自己跟下源码,学会就可以套用自己写的业务代码

Hutool Version:5.0.6

源码包路径:cn.hutool.core.thread

Builder 模式不同的实现方式


上文说过,设计模式重思想,就像 Builder 模式,强调的是 管理依赖关系或者约束条件

刚才 Hutool Builder 只是一种实现方式,之前还用过静态内部类的实现方式

代码经过精剪,并且为了阅读体验感,把部分缩进去除了。不过笔者测试过粘贴到 idea 中编译是可以的


@Getter
public class HttpParameters {
 private Builder builder;
 public static Builder newBuilder() { return new Builder(); }
 private HttpParameters(Builder builder) { this.builder = builder; }

 @Getter
 public static class Builder {
  private String url;
  private Object parameter;
  private String httpType;
  public Builder parameter(Object parameter) { this.parameter = parameter; return this;}
  public Builder url(String url) { this.url = url; return this; }
  public Builder httpType(String httpType) { this.httpType = httpType; return this; }
  public HttpParameters build() {
   if (StringUtils.isBlank(url)) {throw new RuntimeException("URL不允许为空 "); }
   // ...
   return new HttpParameters(this);
  }
 }
}

如果后面要获取 HttpParameters 参数就需要先获取 Builder 对象

可能有些小伙伴不习惯这种方式,也可以把 Builder 对象属性在 Parameters 里也定义一份,方式都很灵活

结言

本文通过创建线程池为引,讲述了 Builder 设计模式的场景以及实际用途,并引用 Hutool Builder 模式创建线程池进行讲解。相信大家看完之后对 Builder 模式的场景以及应用有了更深入的了解,另外我们可以将 Builder 模式引入到自己代码中,实际操练一下,相信你也会对它 “爱不释手”

另外,早之前笔者使用线程池都是自己封装,同时用到了 Builder、模版方法 两种模式,并且重写了部分线程池方法,使用以及排查问题都比较顺手。因为篇幅有限这里就不贴了,需要的小伙伴可以添加微信自取

关于 Builder 设计模式本文就讲到这里,后面会陆续输出策略、工厂、责任链等模式;

到此这篇关于火遍全网的Hutool使用Builder模式创建线程池的方法的文章就介绍到这了,更多相关Builder模式创建线程池内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 火遍全网的Hutool使用Builder模式创建线程池的方法

本文链接: https://www.lsjlt.com/news/121749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 火遍全网的Hutool使用Builder模式创建线程池的方法
    前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式...
    99+
    2024-04-02
  • 使用Builder模式怎么构建线程池
    这篇文章将为大家详细讲解有关使用Builder模式怎么构建线程池,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Builder 模式应用场景Builder 模...
    99+
    2024-04-02
  • 线程池的创建方式有哪些
    这篇文章主要讲解了“线程池的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池的创建方式有哪些”吧!什么是线程池线程池(ThreadPool...
    99+
    2024-04-02
  • 详解Java线程池的使用(7种创建方法)
    目录 1. 固定数量的线程池a.  线程池返回结果b. ⾃定义线程池名称或优先级2. 带缓存的线程池3. 执⾏定时任务 a.&nbs...
    99+
    2023-03-24
    Java线程池 Java线程池使用 线程池
  • Android创建线程池的方式有哪些
    在Android中,可以使用以下方式创建线程池:1. 使用ThreadPoolExecutor类:可以通过new ThreadPoo...
    99+
    2023-10-18
    Android
  • java线程池创建的方法是什么
    在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
    99+
    2023-10-25
    java
  • springboot创建线程池的两种方式小结
    目录springboot创建线程池两种方式1.使用static代码块创建2.使用@Configuration @bean注解,程序启动时创建springboot如何开启线程池定义线程...
    99+
    2024-04-02
  • Java多线程 - 创建线程池的方法 - ThreadPoolExecutor和Executors
    文章目录 线程池(重点)线程池介绍实现线程池的方式方式一: 实现类ThreadPoolExecutorThreadPoolExecutor构造器的参数线程池处理Runnable任务线程池处理Callable任务 方式二: ...
    99+
    2023-08-30
    java jvm 开发语言
  • java中线程池创建的方式有哪些
    本篇文章为大家展示了java中线程池创建的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • java线程池的四种创建方式详细分析
    目录前言1. 线程池2. 创建方式前言 在讲述线程池的前提 先补充一下连接池的定义 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用 可以看到其连接池...
    99+
    2024-04-02
  • Java创建线程的七种方法,全网最全面总结~
    目录 前言 一、继承Thread,重写run方法 二、实现Runnable接口,重写run方法 三、使用匿名内部类创建 Thread 子类对象 四、使用匿名内部类,实现Runnable接口 五、lambda表达式 六、实现Callable...
    99+
    2023-09-13
    java 多线程
  • python下thread模块创建线程的方法
    本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!thread方法对创建线程有效且直...
    99+
    2023-06-20
  • Singleton模式创建、多线程与销毁的方法是什么
    这篇文章主要介绍“Singleton模式创建、多线程与销毁的方法是什么”,在日常操作中,相信很多人在Singleton模式创建、多线程与销毁的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Singl...
    99+
    2023-06-18
  • 创建Java线程安全类的七种方法
    目录前言无状态没有共享状态消息传递不可变状态使用来自 java.util.concurrent 的数据结构同步块易失性领域总结前言 几乎每个 Java 应用程序都使用线程。像 Tom...
    99+
    2024-04-02
  • Python中多线程和线程池的使用方法
    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Py...
    99+
    2023-10-12
    python
  • Java线程创建与Thread类的使用方法
    目录1.线程与Thread类1.1操作系统中的线程与Java线程1.1.1线程与Thread类1.1.2Thread类的构造方法1.1.3启用java线程必会的方法1.2第一个Jav...
    99+
    2024-04-02
  • Python线程池的正确使用方法
    目录Python线程池的正确使用1、为什么要使用线程池呢?2、线程池怎么用呢?3、如何非阻塞的获取线程执行的结果4、线程池的运行策略Python线程池的正确使用 1、为什么要使用线程...
    99+
    2024-04-02
  • Java中的异步与线程池怎么创建使用
    这篇文章主要介绍“Java中的异步与线程池怎么创建使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中的异步与线程池怎么创建使用”文章能帮助大家解决问题。初始化线程的4种方式1.继承Thre...
    99+
    2023-07-04
  • Java线程池的使用方法有哪些
    本文小编为大家详细介绍“Java线程池的使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程池的使用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。线程池的创建⽅法总共有 7 种,但...
    99+
    2023-07-05
  • Python爬虫之线程池的使用方法
    这篇文章主要介绍了Python爬虫之线程池的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言学到现在,我们可以说已经学习了爬虫的基础知识,如果没有那些奇奇怪怪的...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作