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

Java對象池pool2分析PooledObjectFactory過程

 更新時間:2025年02月18日 09:02:11   作者:一顆小小的石頭.  
文章介紹了Java中對象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細(xì)講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用

背景

池化技術(shù) 在Java中使用的相當(dāng)多了,例如各種數(shù)據(jù)庫連接池,以及JDK自己實現(xiàn)的線程池等等,從根本上說他們都是對象池,把資源池化,按需存取,不僅能夠一定程度上節(jié)省對象的創(chuàng)建時間(緩存思想),還能夠?qū)Τ刈幼鲆恍┕芾砗涂刂?例如設(shè)置資源最大數(shù),閑置數(shù)等等)。

池的經(jīng)典實現(xiàn)要數(shù) apache 的 pool2 了 .

Pool2

默認(rèn)的對象池是 GenericObjectPool

通過最核心的 borrowObject 和 returnObject 方法進行對象的取和歸還。

但是在 GenericObjectPool 的構(gòu)造函數(shù)中有兩個參數(shù)。

GenericObjectPool<MyObject> objectPool =
new GenericObjectPool<>(new MyPooledObjectFactory(),new GenericObjectPoolConfig());

其中第二個是GenericObjectPoolConfig類,里面是關(guān)于Pool的一些配置,例如最大資源數(shù),最大,最小閑置數(shù)。它繼承了BaseObjectPoolConfig類,里面有關(guān)于空閑資源的清理策略,資源爭奪屬性,等待超時時間等等很多復(fù)雜的屬性,詳見源碼。

這里主要說的是第一個參數(shù) PooledObjectFactory ,他是唯一需要我們自己去實現(xiàn)的地方,很明顯是一個工廠,用于 生產(chǎn),銷毀,激活,驗證 我們的池化資源對象。

注意:

放入池中的資源被包裝成了 PooledObject 類型的對象,之所以包裝,是因為向其中添加了很多屬性,例如資源對象的狀態(tài),等待時間,閑置時間,最后一次使用的時間,借出次數(shù)等等屬性。類似于JDK線程池放入的 Runnble對象會被包裝成Worker對象一樣。

這里以商場里的共享充電寶為例,這個簡單來說就是一個池化的思維。

每個充電寶只有一個屬性,那就是剩余電量。用于模擬,只有一個方法,就是借出去被使用。

那么我們需要自己實現(xiàn)的 PooledObjectFactory 可以是:

  • 第一個 makeObject 方法 :用于對象的新建,一般是 new 出來之后包裝一下。而什么時候需要新建呢,根據(jù)策略不同則時機不同。例如在沒有閑置資源對象,且已存在的資源數(shù)不超過所設(shè)置的最大資源時新建。
  • 第二個 destroyObject 方法:銷毀一個對象,除了很容易想到的閑置過長時間被清理掉了導(dǎo)致需要銷毀之外,還有如果進行了第三個方法且返回了 false ,那么也是需要銷毀的。
  • 第三個 validateObject方法:檢驗這個對象是否還有有效,借出和歸還時,以及內(nèi)置后臺線程檢測閑置情況時,可以通過驗證可以去除一些不符合業(yè)務(wù)邏輯的資源對象。默認(rèn)這個方法是不被調(diào)用的,要開啟則需要在PoolConfig中設(shè)置setTestOnBorrow , setTestOnReturn , setTestWhileIdle等屬性。

第一個 activeObject 方法: 在借用一個對象的時候調(diào)用,則可以在此重置其內(nèi)部狀態(tài),那么返回的對象就像新的一樣,例如這里重置電量

第一個 passivateObject 方法: 對應(yīng) activateObject 方法,是在歸還一個對象的時候調(diào)用,注意不應(yīng)與activateObject方法有業(yè)務(wù)邏輯上的沖突

用于測試的主函數(shù):

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot Java后端實現(xiàn)okhttp3超時設(shè)置的方法實例

    SpringBoot Java后端實現(xiàn)okhttp3超時設(shè)置的方法實例

    Okhttp的使用沒有httpClient廣泛,網(wǎng)上關(guān)于Okhttp設(shè)置代理的方法很少,下面這篇文章主要給大家介紹了關(guān)于SpringBoot Java后端實現(xiàn)okhttp3超時設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • java實現(xiàn)調(diào)用http請求的五種常見方式

    java實現(xiàn)調(diào)用http請求的五種常見方式

    在實際開發(fā)過程中,我們經(jīng)常需要調(diào)用對方提供的接口或測試自己寫的接口是否合適,本文主要介紹了java實現(xiàn)調(diào)用http請求的四種常見方式,感興趣的可以了解一下
    2024-07-07
  • MVC+DAO設(shè)計模式下的設(shè)計流程詳解

    MVC+DAO設(shè)計模式下的設(shè)計流程詳解

    這篇文章主要介紹了MVC+DAO設(shè)計模式下的設(shè)計流程詳解,分別介紹了數(shù)據(jù)庫設(shè)計、設(shè)計符合java bean標(biāo)準(zhǔn)的entity類、設(shè)計訪問數(shù)據(jù)庫的DAO接口等內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    這篇文章主要介紹了Spring cloud gateway工作流程原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • JavaMail整合Spring實現(xiàn)郵件發(fā)送功能

    JavaMail整合Spring實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了JavaMail整合Spring實現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 打開.properties中文顯示unicode編碼問題以及解決

    打開.properties中文顯示unicode編碼問題以及解決

    這篇文章主要介紹了打開.properties中文顯示unicode編碼問題以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    這篇文章主要為大家分享了java實現(xiàn)的一個簡單TCPSocket聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • MyBatisPlus+SpringBoot實現(xiàn)樂觀鎖功能詳細(xì)流程

    MyBatisPlus+SpringBoot實現(xiàn)樂觀鎖功能詳細(xì)流程

    樂觀鎖是針對一些特定問題的解決方案,主要解決丟失更新問題,下面這篇文章主要給大家介紹了關(guān)于MyBatisPlus+SpringBoot實現(xiàn)樂觀鎖功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • MybatisPlus使用queryWrapper如何實現(xiàn)復(fù)雜查詢

    MybatisPlus使用queryWrapper如何實現(xiàn)復(fù)雜查詢

    這篇文章主要介紹了MybatisPlus使用queryWrapper如何實現(xiàn)復(fù)雜查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java使用WebView實現(xiàn)桌面程序的技術(shù)指南

    Java使用WebView實現(xiàn)桌面程序的技術(shù)指南

    在現(xiàn)代軟件開發(fā)中,許多應(yīng)用需要在桌面程序中嵌入 Web 頁面,例如,你可能需要在 Java 桌面應(yīng)用中嵌入一部分 Web 前端,或者加載一個 HTML5 界面以增強用戶體驗,所以本文給大家介紹了Java使用WebView實現(xiàn)桌面程序的技術(shù)指南,需要的朋友可以參考下
    2025-05-05

最新評論

华坪县| 长顺县| 新竹县| 祥云县| 沁阳市| 永福县| 福建省| 客服| 南溪县| 额尔古纳市| 二连浩特市| 云霄县| 滨海县| 电白县| 玛多县| 茶陵县| 五华县| 全州县| 雅安市| 贵港市| 寻甸| 辽宁省| 青州市| 吉林市| 江西省| 黄大仙区| 襄樊市| 青岛市| 扎鲁特旗| 吴川市| 乐陵市| 确山县| 淮安市| 延长县| 乐平市| 丘北县| 黄梅县| 行唐县| 修水县| 洛扎县| 太湖县|