日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 火遍全网的Hutool,如何使用Builder模式构建线程池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Builder 設計模式也叫做 構建者模式或者建造者模式,名字只是一種叫法,當聊起三種名稱的時候知道是怎么回事就行

Builder 設計模式在作者編碼過程中,屬于比較常用的模式之一。優秀的設計模式總是會受到廣大開發者的青睞,Hutool 也是其中之一

因為上周編寫的業務需要用到線程池,就去 Hutool thread 包下看了看,還真有驚喜,學習到了一種之前編碼中沒用過的 Builder 模式實現

這里必須提一句:設計模式重要的是思想,一種設計模式可能不止一種實現方式

Builder 模式文章大綱如下:

  • Builder 模式應用場景

  • Hutool 線程池如何應用 Builder 模式

  • Builder 模式不同的實現方式

  • Builder 模式總結

  • Builder 模式應用場景

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

    我們依照線程池來舉例,默認創建的線程池,構造方法最多有七個參數,核心線程數、最大線程數、阻塞隊列、線程存活時間...

    日常使用創建線程池時,大家想一下為什么要這么設計?一起來看下源碼注釋中如何解釋此行為

    線程池之所以設置如此之多的構造參數,是因為對這些參數會有一定規則的校驗,如果不滿足線程池的規則,將不允許創建線程池,通過拋異常的方式終止程序

    終止規則大概有七點,這里列舉一下:

  • 核心線程數不可以小于 0

  • 線程存活時間不可以小于 0

  • 最大線程數不可以小于等于 0,同時也不可以小于核心線程數

  • 阻塞隊列、線程工廠、拒絕策略參數均不可為空

  • 上述七點有兩個作用,其一是為了讓核心參數滿足線程池運行流程,其二是為了保障運行時的穩定性

    小伙伴想一哈線程池創建是不是灰常灰常適合 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;?}@Getterpublic?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 模式引入到自己代碼中,實際操練一下,相信你也會對它 "愛不釋手"

    有道無術,術可成;有術無道,止于術

    歡迎大家關注Java之道公眾號

    好文章,我在看??

    總結

    以上是生活随笔為你收集整理的火遍全网的Hutool,如何使用Builder模式构建线程池的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。