由於在開源中國的資訊中看到Apache Commons Pool的版本升級了,Apache Commons Pool 2.6.2 發佈java
而後發版文檔中描述了修復的幾個bug,不求甚解!設計模式
咱們就先用用這個最新的包來看看:學習
看javadoc文檔,仍是比較簡潔的測試
先來寫一個demo:.net
寫一個測試方法:線程
運行輸出:設計
固然若是我把循環的次數加大,好比從8改爲10,那麼就會阻塞等待其餘的先歸還,固然還能夠設置超時等的限制。3d
這裏使用自帶的GenericObjectPoolConfig,配置主要以下:對象
而後再介紹一下這些參數:blog
- maxActive: 連接池中最大鏈接數,默認爲8.
- maxIdle: 連接池中最大空閒的鏈接數,默認爲8.
- minIdle: 鏈接池中最少空閒的鏈接數,默認爲0.
- maxWait: 當鏈接池資源耗盡時,調用者最大阻塞的時間,超時將跑出異常。單位,毫秒數;默認爲-1.表示永不超時.
- minEvictableIdleTimeMillis: 鏈接空閒的最小時間,達到此值後空閒鏈接將可能會被移除。負值(-1)表示不移除。
- softMinEvictableIdleTimeMillis: 鏈接空閒的最小時間,達到此值後空閒連接將會被移除,且保留「minIdle」個空閒鏈接數。默認爲-1.
- numTestsPerEvictionRun: 對於「空閒連接」檢測線程而言,每次檢測的連接資源的個數。默認爲3.
- testOnBorrow: 向調用者輸出「連接」資源時,是否檢測是有有效,若是無效則從鏈接池中移除,並嘗試獲取繼續獲取。默認爲false。建議保持默認值.
- testOnReturn: 向鏈接池「歸還」連接時,是否檢測「連接」對象的有效性。默認爲false。建議保持默認值.
- testWhileIdle: 向調用者輸出「連接」對象時,是否檢測它的空閒超時;默認爲false。若是「連接」空閒超時,將會被移除。建議保持默認值.
- timeBetweenEvictionRunsMillis: 「空閒連接」檢測線程,檢測的週期,毫秒數。若是爲負值,表示不運行「檢測線程」。默認爲-1.
- whenExhaustedAction: 當「鏈接池」中active數量達到閥值時,即「連接」資源耗盡時,鏈接池須要採起的手段, 默認爲1:
-> 0 : 拋出異常,
-> 1 : 阻塞,直到有可用連接資源
-> 2 : 強制建立新的連接資源
咱們能夠看到PooledObjectFactory接口定義了要作哪一些方法。
按照阿里開發手冊,若是在實現中使用了設計模式,那麼在命名規則中的名稱也要體現。
固然在上面的代碼中,咱們使用的誰抽象類BasePooledObjectFactory
- Object makeObject() : 建立一個新對象;當對象池中的對象個數不足時,將會使用此方法來輸出一個新的"對象",並交付給對象池管理.
- void destroyObject(Object obj) : 銷燬池再也不須要的實例。
- boolean validateObject(Object obj) : 檢測對象是否有效。
- void activateObject(Object obj) : 激活對象,讓調用者使用時感受像一個新建立的對象同樣。
- void void passivateObject(Object obj) : 當調用者"歸還對象"時,取消初始化要返回到空閒對象池的實例。
後續多學習點再繼續!
參考:https://shift-alt-ctrl.iteye.com/blog/1917782