最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

火遍全網(wǎng)的Hutool使用Builder模式創(chuàng)建線程池的方法

 更新時(shí)間:2021年03月16日 09:27:27   作者:源碼興趣圈  
這篇文章主要介紹了火遍全網(wǎng)的Hutool使用Builder模式創(chuàng)建線程池的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

Builder 設(shè)計(jì)模式也叫做 構(gòu)建者模式或者建造者模式,名字只是一種叫法,當(dāng)聊起三種名稱的時(shí)候知道是怎么回事就行

Builder 設(shè)計(jì)模式在作者編碼過程中,屬于比較常用的模式之一。優(yōu)秀的設(shè)計(jì)模式總是會(huì)受到廣大開發(fā)者的青睞,Hutool 也是其中之一

因?yàn)樯现芫帉懙臉I(yè)務(wù)需要用到線程池,就去 Hutool thread 包下看了看,還真有驚喜,學(xué)習(xí)到了一種之前編碼中沒用過的 Builder 模式實(shí)現(xiàn)

這里必須提一句:設(shè)計(jì)模式重要的是思想,一種設(shè)計(jì)模式可能不止一種實(shí)現(xiàn)方式

Builder 模式文章大綱如下:

  1. Builder 模式應(yīng)用場(chǎng)景
  2. Hutool 線程池如何應(yīng)用 Builder 模式
  3. Builder 模式不同的實(shí)現(xiàn)方式
  4. Builder 模式總結(jié)

Builder 模式應(yīng)用場(chǎng)景


Builder 模式作用域:如果類的屬性之間有一定的依賴關(guān)系或者約束條件(源自設(shè)計(jì)模式之美),那么就可以考慮使用 Builer 設(shè)計(jì)模式

我們依照線程池來舉例,默認(rèn)創(chuàng)建的線程池,構(gòu)造方法最多有七個(gè)參數(shù),核心線程數(shù)、最大線程數(shù)、阻塞隊(duì)列、線程存活時(shí)間…

日常使用創(chuàng)建線程池時(shí),大家想一下為什么要這么設(shè)計(jì)?一起來看下源碼注釋中如何解釋此行為

線程池之所以設(shè)置如此之多的構(gòu)造參數(shù),是因?yàn)閷?duì)這些參數(shù)會(huì)有一定規(guī)則的校驗(yàn),如果不滿足線程池的規(guī)則,將不允許創(chuàng)建線程池,通過拋異常的方式終止程序

終止規(guī)則大概有七點(diǎn),這里列舉一下:

  1. 核心線程數(shù)不可以小于 0
  2. 線程存活時(shí)間不可以小于 0
  3. 最大線程數(shù)不可以小于等于 0,同時(shí)也不可以小于核心線程數(shù)
  4. 阻塞隊(duì)列、線程工廠、拒絕策略參數(shù)均不可為空

上述七點(diǎn)有兩個(gè)作用,其一是為了讓核心參數(shù)滿足線程池運(yùn)行流程,其二是為了保障運(yùn)行時(shí)的穩(wěn)定性

小伙伴想一哈線程池創(chuàng)建是不是灰?;页_m合 Builder 模式,構(gòu)造器函數(shù)過多以及屬性之間存在依賴關(guān)系和約束條件

Hutool Builder 創(chuàng)建線程池


Hutool 線程池相關(guān)使用 Builder 設(shè)計(jì)模式有兩處,一個(gè)是創(chuàng)建線程池,另一個(gè)是創(chuàng)建線程工廠,我們重點(diǎn)圍繞線程池說

創(chuàng)建 Hutool 線程池比較簡(jiǎn)單且優(yōu)雅,筆者較喜歡這種鏈?zhǔn)斤L(fēng)格,所以抽象公共業(yè)務(wù)時(shí)都會(huì)使用此模式,如圖所示

這個(gè)時(shí)候跟下源碼,先從 ExecutorBuilder#create 入手,小伙伴就明白 Hutool 是如何玩 Builder 模式了

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

What? 自己創(chuàng)建自己?這是要搞啥子

小伙伴想一下,如果你想要對(duì)一個(gè)類中屬性進(jìn)行約束,前提是不是先應(yīng)該把屬性搞到手

沒錯(cuò),ExecutorBuilder#create 方法返回自己本身,然后通過 set 方法 把數(shù)據(jù)填充到創(chuàng)建出來的對(duì)象上,最后再進(jìn)行依賴關(guān)系整理和條件約束

看一下 ExecutorBuilder#build 方法內(nèi)部做了什么事情

這里有個(gè)知識(shí)點(diǎn),也是B格之一,大家看到 build 方法上有 @Override 注解,證明它是實(shí)現(xiàn)了接口方法

Hutool 定義了 Builder 接口,實(shí)現(xiàn)此接口即可完成 Builder 模式,泛型 T 代表需要返回的構(gòu)造對(duì)象類型,比如剛才線程池 Builder 泛型就是 ThreadPoolExecutor

在實(shí)現(xiàn) build 方法上調(diào)用真正管理依賴和約束的方法 build(ExecutorBuilder builder),將剛才創(chuàng)建好并且已經(jīng)賦過值的構(gòu)建對(duì)象傳入

最后 build(ExecutorBuilder builder) 返回的就是我們所需要的線程池對(duì)象,這一塊大家可以自己跟下源碼,學(xué)會(huì)就可以套用自己寫的業(yè)務(wù)代碼

Hutool Version:5.0.6

源碼包路徑:cn.hutool.core.thread

Builder 模式不同的實(shí)現(xiàn)方式


上文說過,設(shè)計(jì)模式重思想,就像 Builder 模式,強(qiáng)調(diào)的是 管理依賴關(guān)系或者約束條件

剛才 Hutool Builder 只是一種實(shí)現(xiàn)方式,之前還用過靜態(tài)內(nèi)部類的實(shí)現(xiàn)方式

代碼經(jīng)過精剪,并且為了閱讀體驗(yàn)感,把部分縮進(jìn)去除了。不過筆者測(cè)試過粘貼到 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 參數(shù)就需要先獲取 Builder 對(duì)象

可能有些小伙伴不習(xí)慣這種方式,也可以把 Builder 對(duì)象屬性在 Parameters 里也定義一份,方式都很靈活

結(jié)言

本文通過創(chuàng)建線程池為引,講述了 Builder 設(shè)計(jì)模式的場(chǎng)景以及實(shí)際用途,并引用 Hutool Builder 模式創(chuàng)建線程池進(jìn)行講解。相信大家看完之后對(duì) Builder 模式的場(chǎng)景以及應(yīng)用有了更深入的了解,另外我們可以將 Builder 模式引入到自己代碼中,實(shí)際操練一下,相信你也會(huì)對(duì)它 “愛不釋手”

另外,早之前筆者使用線程池都是自己封裝,同時(shí)用到了 Builder、模版方法 兩種模式,并且重寫了部分線程池方法,使用以及排查問題都比較順手。因?yàn)槠邢捱@里就不貼了,需要的小伙伴可以添加微信自取

關(guān)于 Builder 設(shè)計(jì)模式本文就講到這里,后面會(huì)陸續(xù)輸出策略、工廠、責(zé)任鏈等模式;

到此這篇關(guān)于火遍全網(wǎng)的Hutool使用Builder模式創(chuàng)建線程池的方法的文章就介紹到這了,更多相關(guān)Builder模式創(chuàng)建線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java并行執(zhí)行任務(wù)的幾種方案小結(jié)

    Java并行執(zhí)行任務(wù)的幾種方案小結(jié)

    這篇文章主要介紹了Java并行執(zhí)行任務(wù)的幾種方案小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JavaWeb開發(fā)入門第一篇必備知識(shí)講解

    JavaWeb開發(fā)入門第一篇必備知識(shí)講解

    JavaWeb開發(fā)入門第一篇主要內(nèi)容介紹的是必備知識(shí)、基礎(chǔ)知識(shí)、搭建JavaWeb應(yīng)用開發(fā)環(huán)境,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 聊聊Lombok中的@Builder注解使用教程

    聊聊Lombok中的@Builder注解使用教程

    @Builder注解的作用主要是用來生成對(duì)象,并且可以為對(duì)象鏈?zhǔn)劫x值。接下來通過本文給大家介紹Lombok中的@Builder注解使用教程,感興趣的朋友一起看看吧
    2021-11-11
  • SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗

    SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗

    Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、基于生產(chǎn)級(jí)別的Spring應(yīng)用程序的框架,下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 使用IDEA打jar包的詳細(xì)圖文教程

    使用IDEA打jar包的詳細(xì)圖文教程

    JAR文件是一種壓縮文件,與常見的ZIP壓縮文件兼容,被稱為JAR包,下面這篇文章主要給大家介紹了關(guān)于使用IDEA打jar包的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • java轉(zhuǎn)化為exe程序步驟詳解

    java轉(zhuǎn)化為exe程序步驟詳解

    在本篇內(nèi)容里我們給大家分享了關(guān)于java轉(zhuǎn)化為exe程序的具體步驟和相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • 解析Java按值傳遞還是按引用傳遞

    解析Java按值傳遞還是按引用傳遞

    這篇文章主要介紹了解析Java按值傳遞還是按引用傳遞,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Maven工程路徑映射的實(shí)現(xiàn)示例

    Maven工程路徑映射的實(shí)現(xiàn)示例

    本文主要介紹了Maven工程路徑映射的實(shí)現(xiàn)示例,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備

    java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備

    這篇文章主要介紹了java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 從Java的jar文件中讀取數(shù)據(jù)的方法

    從Java的jar文件中讀取數(shù)據(jù)的方法

    這篇文章主要介紹了從Java的jar文件中讀取數(shù)據(jù)的方法,實(shí)例分析了java檔案文件的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

安义县| 共和县| 雅安市| 二手房| 昌江| 永川市| 蒙阴县| 化州市| 陇川县| 长岛县| 靖边县| 西乌珠穆沁旗| 台北市| 惠东县| 安泽县| 上林县| 民丰县| 六枝特区| 会东县| 府谷县| 东海县| 蒲城县| 宿州市| 富民县| 伽师县| 枞阳县| 江源县| 江西省| 连城县| 监利县| 独山县| 安仁县| 奉化市| 石景山区| 久治县| 石河子市| 方城县| 浮梁县| 秦皇岛市| 康乐县| 大埔区|