溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用Builder模式怎么構(gòu)建線(xiàn)程池

發(fā)布時(shí)間:2021-08-10 16:38:37 來(lái)源:億速云 閱讀:149 作者:Leah 欄目:web開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)使用Builder模式怎么構(gòu)建線(xiàn)程池,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

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

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

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

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

使用Builder模式怎么構(gòu)建線(xiàn)程池

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

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

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 核心線(xiàn)程數(shù)不可以小于 0

  3. 線(xiàn)程存活時(shí)間不可以小于 0

  4. 最大線(xiàn)程數(shù)不可以小于等于 0,同時(shí)也不可以小于核心線(xiàn)程數(shù)

  5. 阻塞隊(duì)列、線(xiàn)程工廠、拒絕策略參數(shù)均不可為空

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

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

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

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

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

使用Builder模式怎么構(gòu)建線(xiàn)程池

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

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

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

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

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

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

使用Builder模式怎么構(gòu)建線(xiàn)程池

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

使用Builder模式怎么構(gòu)建線(xiàn)程池

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

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

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

  • Hutool Version:5.0.6

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

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

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

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

代碼經(jīng)過(guò)精剪,并且為了閱讀體驗(yàn)感,把部分縮進(jìn)去除了。不過(guò)筆者測(cè)試過(guò)粘貼到 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);         }     } }

關(guān)于使用Builder模式怎么構(gòu)建線(xiàn)程池就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI