麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

struts源代碼閱讀(Commons-Pool包)

2019-11-18 12:54:54
字體:
供稿:網(wǎng)友

  一、 XXXObjectPoolFactory
  
  這些類用來生成相應(yīng)的XXXObjectPool,比如GenericKeyedObjectPoolFactory:這個類用來生成一個新的GenericKeyedObjectPool對象。它實際的作用只是保存創(chuàng)建一個GenericKeyedObjectPool對象所需要的配置參數(shù)。假如使用默認(rèn)的配置參數(shù)生成一個GenericKeyedObjectPool對象,那么可以調(diào)用GenericKeyedObjectPoolFactory(KeyedPoolableObjectFactory factory, GenericKeyedObjectPool.Config config),其中Config類里保存所有的缺省配置參數(shù)。
  
  二、GenericKeyedObjectPool
  
  通過_poolMap來治理相應(yīng)的對象鏈,key作為尋找不同對象鏈的線索。也就是說,一個GenericKeyedObjectPool中可以治理多個不同key的對象集合,每個集合通過_activeMap用來保存各個不同的Key當(dāng)前的活動對象的數(shù)量(閑置對象的數(shù)量可以直接通過相應(yīng)的CursorableLinkedList的size來獲取),可以通過getNumActive(Object key)和getNumIdle(Object key)方法獲取這
  
  兩個值。這個對象集合通過CursorableLinkedList來治理。
  
  這個類里的_maxIdle和_maxActive屬性是針對單個key對應(yīng)的CursorableLinkedList而言的最大值,而_maxTotal屬性則是對所有的key表示的對象集合的總和的最大值。_totalActive+_totalIdle用來和_maxTotal的值進(jìn)行對比,它們可以通過getNumActive()和getNumIdle()獲取。_poolList存放的值與 _poolMap 中的key值一樣,注重這個對象不是沒有用處的,因為CursorableLinkedList是一個答應(yīng)多個線程同步迭代的類。
  
  1、幾個內(nèi)置的static類型的變量:
  
  WHEN_EXHAUSTED_FAIL 這個屬性表明當(dāng)對象池已經(jīng)用盡時(比如說池中的對象數(shù)目已經(jīng)達(dá)到了最大值),borrowObject方法應(yīng)該馬上拋出NoSUChElementException異常。
  
  WHEN_EXHAUSTED_BLOCK 這個屬性表明當(dāng)對象池已經(jīng)用盡時(比如說池中的對象數(shù)目已經(jīng)達(dá)到了最大值),borrowObject方法應(yīng)該等待,直到對象池中有一個對象可以讓它返回,或者達(dá)到了最大等待時間(DEFAULT_MAX_WAIT)。
  
  WHEN_EXHAUSTED_GROW 這個屬性表明即使在對象池已經(jīng)用盡時(比如說池中的對象數(shù)目已經(jīng)達(dá)到了最大值),borrowObject方法應(yīng)該仍然返回一個對象。
  
  DEFAULT_WHEN_EXHAUSTED_ACTION 這個屬性表明當(dāng)對象池用盡的時候(比如說池中的對象數(shù)目已經(jīng)達(dá)到了最大值)應(yīng)該采取上面的那種策略。
  
  DEFAULT_MAX_IDLE 和 DEFAULT_MAX_ACTIVE分別指定了在池中對大的空閑和活動對象的數(shù)目。DEFAULT_MAX_TOTAL表明對象池答應(yīng)存在的最大對象數(shù)量。
  
  2、CursorableLinkedList
  
  它實際是一個雙向列表,與LinkedList的區(qū)別是:它答應(yīng)多個線程執(zhí)行迭代。它的實現(xiàn)思路是:在每次生成一個Cursor時:CursorableLinkedList.Cursor cursor(int i),都會吧這個新生成的Cursor對象包裝到一個 WeakReference 中:_cursors.add( new WeakReference(cur) );在不需要的的時候需要調(diào)用Cursor. close()方法取消注冊。而Cursor實際是一個以內(nèi)嵌類的方式的實現(xiàn)了ListIterator接口的類。WeakReference 不會增加被其包裝的類的引用次數(shù),換句話說,它不會影響JVM的垃圾收集。
  
  3、borrowObject(Object key)
  
  這個方法用來從相應(yīng)的key表示的對象集合中取出一個對象。假如對應(yīng)的對象集合不存在,會創(chuàng)建一個這樣的集合。假如集合當(dāng)前沒有閑置的對象可以返回,并且當(dāng)前的active < _maxActive && totalActive + _totalIdle < _maxTotal,那么通過KeyedPoolableObjectFactory創(chuàng)建一個新的對象;否則就根據(jù)_whenExhaustedAction的設(shè)定執(zhí)行相應(yīng)的操作。要注重每次都會執(zhí)行_factory.activateObject(key,pair.value)方法初始化這個對象。在返回這個對象之前,假如設(shè)定了_testOnBorrow標(biāo)志則調(diào)用_factory.validateObject(Object key, Object obj)方法,假如不符合要求會拋出NoSuchElementException異常,否則返回這個對象。
  
  4、returnObject(Object key, Object obj)
  
  這個方法用來把一個對象返回給key表示的對象集合,這個方法的執(zhí)行過程與borrowObject(Object key)方法相似。它會根據(jù)_testOnReturn標(biāo)志執(zhí)行_factory.validateObject(Object key, Object obj)方法檢查返回的對象是否合格。要注重每次都會執(zhí)行 _factory.passivateObject(key, obj)方法“消除”這個對象。
  
  5、過期類的回收:
  
  Evictor 為一個內(nèi)嵌類,實現(xiàn)自Runnable接口。它每過_timeBetweenEvictionRunsMillis毫秒會調(diào)用一次evict()方法,在后臺收集垃圾壽命超過_minEvictableIdleTimeMillis毫秒的對象。每當(dāng)我們創(chuàng)建一個GenericKeyedObjectPool對象的時候,這個類會被自動創(chuàng)建,并且被啟動。evict() 方法很簡單,它首先創(chuàng)建一個_evictionKeyCursor = _poolList.cursor()對象,然后根據(jù)key遍歷每一個對象集合。
  
  查找到過期的就會刪除。
  
  三、SoftReferenceObjectPool
  
  通過SoftReference進(jìn)行對象的保存,這個SoftReference的好處是你不需要自己進(jìn)行收集,它會在JVM的內(nèi)存用盡時被自動回收。這種對象池的特色是:
  
  a、可以保存任意多個對象,不會有容量已滿的情況發(fā)生。
  
  b、在對象池已空的時候,調(diào)用它的borrowObject方法,會自動返回新創(chuàng)建的實例。
  
  c、可以在初始化同時,在池內(nèi)預(yù)先創(chuàng)建一定量的對象。
  
  d、當(dāng)內(nèi)存不足的時候,池中的對象可以被java虛擬機(jī)回收。
  
  四、StackObjectPool 和 StackKeyedObjectPool
  
  通過一個Stack對對象進(jìn)行治理,要注重這個Stack是繼續(xù)自Vector對象的。因此雖然線程安全,但是效率較低。這種對象池的特色是:
  
  a、可以為對象池指定一個初始的參考大?。ó?dāng)空間不夠時會自動增長)。
  
  b、在對象池已空的時候,調(diào)用它的borrowObject方法,會自動返回新創(chuàng)建的實例。
  
  c、可以為對象池指定一個可保存的對象數(shù)目的上限。達(dá)到這個上限之后,再向池里送回的對象會被自動送去回收。
  
  五、PoolableObjectFactory
  
  Pool組件利用PoolableObjectFactory來照看被池化的對象。ObjectPool的實例在需要處理被池化的對象的產(chǎn)生、激活、掛起、校驗和銷毀工作時,就會調(diào)用跟它關(guān)聯(lián)在一起的PoolableObjectFactory實例的相應(yīng)方法來操作。 用戶需要自己實現(xiàn)這個接口。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费午夜视频在线观看 | 91成人一区| 一级国产精品一级国产精品片 | 激情小说激情电影 | 美女毛片儿 | 成年免费大片黄在线观看岛国 | 国产精品一区在线免费观看 | 欧美a级在线免费观看 | 中文字幕综合在线观看 | 国产精品久久久久久久亚洲按摩 | 国产精品一区二区三区在线 | 日本xxxx色视频在线观看免费, | 久久爽久久爽久久av东京爽 | 久久精品视频网址 | 毛片成人网 | 九草av| 亚洲特黄| 久久草在线视频国产 | wankzhd| 99精品视频在线观看免费 | 91九色视频| 久久新地址 | 91福利免费观看 | 91一区二区三区久久久久国产乱 | 精品国产三级a | 国产羞羞网站 | 成年人免费视频播放 | 视频一区二区三区中文字幕 | 日本在线免费观看 | 污片在线观看视频 | 综合97 | 欧美激情性色生活片在线观看 | 国产成人精品无人区一区 | vidz 98hd | 亚洲一区二区三区在线免费观看 | 全免费午夜一级毛片真人 | 日韩在线播放第一页 | 男男羞羞视频网站国产 | 神马久久蜜桃 | 中国产一级毛片 | 污版视频在线观看 |