jakata common pools 源碼研究

    前幾天和同事聊天,同事做c++的,聊到c++沒有很好的數據庫連接池庫,同事想自己寫一個,但擔心自己考慮不全面。我不以爲然,數據庫連接池而已,又不是沒寫過,沒有open source之前,還不是自己寫。同事卻認爲定我考慮的不全面。所以,才找來jakata common pools的源碼看看。

 jakata common pools中主要就以下三個接口
   ObjectPool   連接池
   ObjectPoolFactory  連接池工廠
   PoolableObjectFactory  連接工廠
擴展開有:
基於key值管理的實現接口:
 KeyedObjectPool
KeyedObjectPoolFactory
KeyedPoolableObjectFactory
繼續擴展:
基於key值管理的一個簡單實現的接口
BaseKeyedObjectPool
................

同時提供了BaseKeyedObjectPool的幾種算法的實現,主要集中在對象在pools中的儲存的數據結構不同。

功能上:
ObjectPool   :
borrowObject 獲取連接
returnObject 返回連接
invalidateObject(Object obj) 驗證連接是否可用
addObject()  增加連接
getNumActive 獲取活動連接數目
clear 清空
close 關閉


在實現中,提供了一些額外的功能:(以GenericKeyedObjectPool 爲例)
maxIdle  最大空閒連接
maxActive 最大活躍連接
maxTotal  最大總數
minIdle 最小空閒
maxWait 最大阻塞時間
whenExhaustedAction 數據庫連接沒有後,如何處理
testOnBorrow  獲取連接時,是否測試連接
testOnReturn   返回連接是否測試連接
testWhileIdle   空閒是否測試連接
timeBetweenEvictionRunsMillis 測試連接時間間隔
numTestsPerEvictionRun  空閒時同時測試連接數目
minEvictableIdleTimeMillis  最小可避免空閒時間。

   所有可能產生併發的地方都使用了synchronized進行了串行化。效率一般。實現較爲簡單

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章