91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Builder模式怎么構建線程池

發布時間:2021-08-10 16:38:37 來源:億速云 閱讀:158 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關使用Builder模式怎么構建線程池,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Builder 模式應用場景

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

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

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

使用Builder模式怎么構建線程池

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

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

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 核心線程數不可以小于 0

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

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

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

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

小伙伴想一哈線程池創建是不是灰常灰常適合 Builder 模式,構造器函數過多以及屬性之間存在依賴關系和約束條件

Hutool Builder 創建線程池

Hutool 線程池相關使用 Builder 設計模式有兩處,一個是創建線程池,另一個是創建線程工廠,我們重點圍繞線程池說

創建 Hutool 線程池比較簡單且優雅,筆者較喜歡這種鏈式風格,所以抽象公共業務時都會使用此模式,如圖所示

使用Builder模式怎么構建線程池

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

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

What?自己創建自己?這是要搞啥子

小伙伴想一下,如果你想要對一個類中屬性進行約束,前提是不是先應該把屬性搞到手

沒錯,ExecutorBuilder#create 方法返回自己本身,然后通過 set 方法  把數據填充到創建出來的對象上,最后再進行依賴關系整理和條件約束

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

使用Builder模式怎么構建線程池

這里有個知識點,也是B格之一,大家看到 build 方法上有 @Override 注解,證明它是實現了接口方法

使用Builder模式怎么構建線程池

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);         }     } }

關于使用Builder模式怎么構建線程池就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

利川市| 满城县| 博乐市| 惠水县| 田东县| 龙州县| 莲花县| 乐平市| 庆城县| 神农架林区| 湟源县| 德州市| 木里| 龙口市| 奎屯市| 玉山县| 海南省| 崇文区| 潜山县| 会同县| 梧州市| 榆林市| 奇台县| 昌吉市| 临汾市| 清徐县| 灌云县| 高邮市| 长阳| 会宁县| 融水| 西华县| 蛟河市| 靖边县| 新巴尔虎左旗| 浦城县| 财经| 获嘉县| 平山县| 潞西市| 南投市|