首页 > 编程知识 正文

线程池corepoolsize,windowbuilder使用

时间:2023-05-06 18:15:53 阅读:144349 作者:2523

前言Builder设计模式也被称为构建者模式或者建造者模式。 名字只是一个称呼,说三个名称的时候知道发生了什么就好了

Builder设计模式在作者进行编码过程中,属于比较常用的模式之一优秀的设计模式总是受到很多开发者的欢迎,Hutool也是其中之一

因为上周写的业务需要使用线程池,所以我去了Hutool thread包下,吓了一跳。 我学到了实现以前编码中没有使用的Builder模式

在此我必须说一句,设计模式重要的是思想

Builder模式的文章大纲如下。

Builder模式应用场景总结Hutool线程池如何应用Builder模式Builder模式的不同实现方法Builder模式

Builder模式应用场景Builder模式范围:如果类的属性之间有一定的依赖关系或者约束条件(源自设计模式之美)可以考虑使用Builer设计模式

看看线程池的例子。 默认情况下创建的线程池最多包含7个参数、核心线程数、最大线程数、阻塞队列、线程生存时间.

如果日常使用线程池创建,请考虑为什么要这样设计。 让我们看看在源代码注释中如何解释这个行为

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

结束规则是7点左右,在这里列举一下:

核心数不能小于0线程的生存时间不能小于0最大线程数不能小于0。 此外,上述七个不能小于核心线程数的阻塞队列、线程工厂和拒绝策略参数都不能为空,这七个点确保了核心参数满足线程池的运行进程和运行时的稳定性

伙伴们一直认为创建一帽线程池是否适合Builder模式。构造器函数过多以及属性之间存在依赖关系和约束条件

创建Hutool Builder线程池有两种与Hutool线程池相关的使用Builder设计模式。 一个是创建线程池,另一个是创建线程工厂。 以线程池为中心进行说明

如图所示,创建Hutool线程池很简单、很优雅,笔者喜欢这种链接样式,因此在抽象公共业务时会使用该模型

此时接源代码,首先从ExecutorBuilder#create开始。 伙伴将了解Hutool是如何在Builder模式下玩的

publicstaticexecutorbuildercreate ({ returnnewexecutorbuilder ) }; } What? 自己做自己吗? 这是打算做什么

如果合作伙伴想约束类中的属性,请首先考虑是否应该获得属性

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

看看ExecutorBuilder#build方法内部发生了什么

这里有知识点。 看到build方法中有@Override注释,证明它实现了接口方法

Hutool定义了Builder接口,通过实现该接口来完成Builder模式,通用t表示要返回的构造对象的类型。 例如,刚才的线程池Builder通用是ThreadPoolExecutor

在实现build方法方面,调用真正儒家美人和约束的方法build(executorbuilderbuilder ),传递刚才创建并分配了值的构造对象

最后一个构建器(executorbuilderbuilder )返回我们需要的线程池对象。 这个块允许大家自己遵循源代码,并应用自己编写的业务代码

Hu tool版本:5.0. 6

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

Builder模式的不同实现方式如上所述,设计模式的重要思想如Builder模式:儒雅的美女关系或者约束条件

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

把代码切得很细,然后为了体验读书的体验,部分地取消了缩进。 但是,笔者测试了可以贴在IDEA上进行编译

@ getterpublicclasshttpparameters { privatebuilderbuilder; 公共静态构建器new builder () { 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 设计模式本文就讲到这里,后面会陆续输出策略、工厂、责任链等模式;如果文章对你有帮助那就点个关注支持下吧,祝好。


微信搜索【源码兴趣圈】,关注公众号后回复 123 领取内容涵盖 GO、Netty、Seata、SpringCloud Alibaba、开发规范、面试宝典、数据结构等学习资料!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。