Apache Commons Pool的簡單使用

由於在開源中國的資訊中看到Apache Commons Pool的版本升級了,Apache Commons Pool 2.6.2 發佈java

而後發版文檔中描述了修復的幾個bug,不求甚解!設計模式

咱們就先用用這個最新的包來看看:學習

看javadoc文檔,仍是比較簡潔的測試

先來寫一個demo:.net

寫一個測試方法:線程

運行輸出:設計

固然若是我把循環的次數加大,好比從8改爲10,那麼就會阻塞等待其餘的先歸還,固然還能夠設置超時等的限制。3d

這裏使用自帶的GenericObjectPoolConfig,配置主要以下:對象

而後再介紹一下這些參數:blog

  1. maxActive: 連接池中最大鏈接數,默認爲8.
  2. maxIdle: 連接池中最大空閒的鏈接數,默認爲8.
  3. minIdle: 鏈接池中最少空閒的鏈接數,默認爲0.
  4. maxWait: 當鏈接池資源耗盡時,調用者最大阻塞的時間,超時將跑出異常。單位,毫秒數;默認爲-1.表示永不超時.
  5. minEvictableIdleTimeMillis: 鏈接空閒的最小時間,達到此值後空閒鏈接將可能會被移除。負值(-1)表示不移除。
  6. softMinEvictableIdleTimeMillis: 鏈接空閒的最小時間,達到此值後空閒連接將會被移除,且保留「minIdle」個空閒鏈接數。默認爲-1.
  7. numTestsPerEvictionRun: 對於「空閒連接」檢測線程而言,每次檢測的連接資源的個數。默認爲3.
  8. testOnBorrow: 向調用者輸出「連接」資源時,是否檢測是有有效,若是無效則從鏈接池中移除,並嘗試獲取繼續獲取。默認爲false。建議保持默認值.
  9. testOnReturn:  向鏈接池「歸還」連接時,是否檢測「連接」對象的有效性。默認爲false。建議保持默認值.
  10. testWhileIdle:  向調用者輸出「連接」對象時,是否檢測它的空閒超時;默認爲false。若是「連接」空閒超時,將會被移除。建議保持默認值.
  11. timeBetweenEvictionRunsMillis:  「空閒連接」檢測線程,檢測的週期,毫秒數。若是爲負值,表示不運行「檢測線程」。默認爲-1.
  12.  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

相關文章
相關標籤/搜索