commons-pool2-2.4.2鏈接池讀後筆記

花了一天,認真把配置項梳理了一下,分類整理以下:html

// 0)構造poolConfig
                GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
                poolConfig.setJmxEnabled(false);// 是否啓用統計,這裏不啓用
                // 1)系統啓動
                poolConfig.setMinIdle(config.getIntValue(MyConstants.MINIDLE));// 啓動時會有線程負責初始化這麼多個鏈接,一個線程負責測試

 

 


                // 2)獲取對象相關的配置
                // 獲取一個object是1)直接borrow->create->等待隊列可用+最大等待時長(最大等待時長的borrow)
                poolConfig.setFairness(BaseObjectPoolConfig.DEFAULT_FAIRNESS);// 從隊列裏borrow時加鎖,默認值爲false,保持默認,後臺爲一個ReentrantLock鎖
                poolConfig.setMaxTotal(config.getIntValue(MyConstants.MAXTOTAL));// 是否能夠直接create
                poolConfig.setBlockWhenExhausted(config.getBooleanValue(MyConstants.BLOCKWHENEXHAUSTED));
                poolConfig.setMaxWaitMillis(config.getLongValue(MyConstants.MAXWAIT));
                poolConfig.setTestOnBorrow(config.getBooleanValue(MyConstants.TESTONBORROW));// borrow的時候,是否須要測試->調用validateObject
                poolConfig.setTestOnCreate(config.getBooleanValue(MyConstants.TESTONCREATE));// create的時候,是否須要測試->調用validateObject
                //.net

 

 


                // 3)歸還對象時相關的配置
                poolConfig.setMaxIdle(config.getIntValue(MyConstants.MAXIDLE));// 是否能夠歸還此對象?
                poolConfig.setLifo(false);// 一旦肯定歸還,放入隊列頭仍是尾?
                poolConfig.setTestOnReturn(config.getBooleanValue(MyConstants.TESTONRETURN));// return的時候,是否須要測試->調用validateObject線程

 

 


                //
                // 4)按期驅逐策略[比較重要,及時驅逐劣幣就靠這個了]
                poolConfig.setEvictionPolicyClassName(BaseObjectPoolConfig.DEFAULT_EVICTION_POLICY_CLASS_NAME);// 默認值
                poolConfig.setTimeBetweenEvictionRunsMillis(
                        config.getIntValue(MyConstants.TIMEBETWEENEVICTIONRUNSMILLIS));// evict驅逐線程的間隔週期
                poolConfig.setNumTestsPerEvictionRun(BaseObjectPoolConfig.DEFAULT_NUM_TESTS_PER_EVICTION_RUN);// 每次進行驅逐測試的個數
                poolConfig.setMinEvictableIdleTimeMillis(config.getLongValue(MyConstants.MINEVICTABLEIDLETIMEMILLIS));// 若是超過這段時間沒有被使用,則無條件被強制驅逐
                poolConfig
                        .setSoftMinEvictableIdleTimeMillis(BaseObjectPoolConfig.DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS);// 若是當前idle的個數>minIdle,而且idle時長超過這個閾值(默認爲30分鐘),則馬上被驅逐
                poolConfig.setTestWhileIdle(config.getBooleanValue(MyConstants.TESTWHILEIDLE));// idle時,經過了evict測試,判斷是否須要被測試->調用validateObject
                //htm

 

網上其餘人寫的博客也不錯:能夠作作參考:對象

http://my.oschina.net/u/1381600/blog/601870blog

http://www.bubuko.com/infodetail-948811.html隊列

相關文章
相關標籤/搜索