java开源对象池_JAVA 对象池
GenericObjectPool利用一個(gè)org.apache.commons.collections.CursorableLinkedList對(duì)象來(lái)保存對(duì)象池里的對(duì)象。這種對(duì)象池的特色是:
可以設(shè)定最多能從池中借出多少個(gè)對(duì)象。
可以設(shè)定池中最多能保存多少個(gè)對(duì)象。
可以設(shè)定在池中已無(wú)對(duì)象可借的情況下,調(diào)用它的borrowObject方法時(shí)的行為,是等待、創(chuàng)建新的實(shí)例還是拋出異常。
可以分別設(shè)定對(duì)象借出和還回時(shí),是否進(jìn)行有效性檢查。
可以設(shè)定是否使用一個(gè)單獨(dú)的線程,對(duì)池內(nèi)對(duì)象進(jìn)行后臺(tái)清理。
GenericObjectPool的構(gòu)造方法共有七個(gè),其中:
最簡(jiǎn)單的一個(gè)是GenericObjectPool(PoolableObjectFactory?factory)。僅僅指明要用的PoolableObjectFactory實(shí)例,其它參數(shù)則采用默認(rèn)值。
最復(fù)雜的一個(gè)是GenericObjectPool(PoolableObjectFactory?factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn,longtimeBetweenEvictionRunsMillis,intnumTestsPerEvictionRun,longminEvictableIdleTimeMillis,booleantestWhileIdle)。其中:
參數(shù)factory指明要與之配合使用的PoolableObjectFactory實(shí)例。
參數(shù)maxActive指明能從池中借出的對(duì)象的最大數(shù)目。如果這個(gè)值不是正數(shù),表示沒有限制。
參數(shù)whenExhaustedAction指定在池中借出對(duì)象的數(shù)目已達(dá)極限的情況下,調(diào)用它的borrowObject方法時(shí)的行為。可以選用的值有:
GenericObjectPool.WHEN_EXHAUSTED_BLOCK,表示等待;
GenericObjectPool.WHEN_EXHAUSTED_GROW,表示創(chuàng)建新的實(shí)例(不過這就使maxActive參數(shù)失去了意義);
GenericObjectPool.WHEN_EXHAUSTED_FAIL,表示拋出一個(gè)java.util.NoSuchElementException異常。
參數(shù)maxWait指明若在對(duì)象池空時(shí)調(diào)用borrowObject方法的行為被設(shè)定成等待,最多等待多少毫秒。如果等待時(shí)間超過了這個(gè)數(shù)值,則會(huì)拋出一個(gè)java.util.NoSuchElementException異常。如果這個(gè)值不是正數(shù),表示無(wú)限期等待。
參數(shù)testOnBorrow設(shè)定在借出對(duì)象時(shí)是否進(jìn)行有效性檢查。
參數(shù)testOnBorrow設(shè)定在還回對(duì)象時(shí)是否進(jìn)行有效性檢查。
參數(shù)timeBetweenEvictionRunsMillis,設(shè)定間隔每過多少毫秒進(jìn)行一次后臺(tái)對(duì)象清理的行動(dòng)。如果這個(gè)值不是正數(shù),則實(shí)際上不會(huì)進(jìn)行后臺(tái)對(duì)象清理。
參數(shù)numTestsPerEvictionRun,設(shè)定在進(jìn)行后臺(tái)對(duì)象清理時(shí),每次檢查幾個(gè)對(duì)象。如果這個(gè)值不是正數(shù),則每次檢查的對(duì)象數(shù)是檢查時(shí)池內(nèi)對(duì)象的總數(shù)乘以這個(gè)值的負(fù)倒數(shù)再向上取整的結(jié)果――也就是說,如果這個(gè)值是-2(-3、-4、-5……)的話,那么每次大約檢查當(dāng)時(shí)池內(nèi)對(duì)象總數(shù)的1/2(1/3、1/4、1/5……)左右。
參數(shù)minEvictableIdleTimeMillis,設(shè)定在進(jìn)行后臺(tái)對(duì)象清理時(shí),視休眠時(shí)間超過了多少毫秒的對(duì)象為過期。過期的對(duì)象將被回收。如果這個(gè)值不是正數(shù),那么對(duì)休眠時(shí)間沒有特別的約束。
參數(shù)testWhileIdle,則設(shè)定在進(jìn)行后臺(tái)對(duì)象清理時(shí),是否還對(duì)沒有過期的池內(nèi)對(duì)象進(jìn)行有效性檢查。不能通過有效性檢查的對(duì)象也將被回收。
另一個(gè)比較特別的構(gòu)造方法是GenericObjectPool(PoolableObjectFactory?factory,?GenericObjectPool.Config?config)?。其中:
參數(shù)factory指明要與之配合使用的PoolableObjectFactory實(shí)例;
參數(shù)config則指明一個(gè)包括了各個(gè)參數(shù)的預(yù)設(shè)值的對(duì)象(詳見《GenericObjectPool.Config》一節(jié))。
剩下的五個(gè)構(gòu)造函數(shù)則是最復(fù)雜的構(gòu)造方法在某方面的簡(jiǎn)化版本,可以根據(jù)情況選用。它們是:
GenericObjectPool(PoolableObjectFactory?factory,intmaxActive)
GenericObjectPool(PoolableObjectFactory?factory,intmaxActive,bytewhenExhaustedAction,longmaxWait)
GenericObjectPool(PoolableObjectFactory?factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,booleantestOnBorrow,booleantestOnReturn)
GenericObjectPool(PoolableObjectFactory?factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle)
GenericObjectPool(PoolableObjectFactory?factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn)
這種對(duì)象池不可以在沒有Jakarta?Commmons?Collections組件支持的情況下運(yùn)行。
總結(jié)
以上是生活随笔為你收集整理的java开源对象池_JAVA 对象池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中set index_pyt
- 下一篇: 线程停止继续_晓龙吊打面试官系列: 如何