成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

common-pool2 使用

since1986 / 2862人閱讀

摘要:使用提供了中對(duì)象池管理方式,它們的使用方式基本一樣,這里以對(duì)象池為例介紹其使用方式,一般實(shí)現(xiàn)自己的對(duì)象池需要經(jīng)過(guò)個(gè)步驟實(shí)現(xiàn)接口該接口是一種工廠模式,實(shí)現(xiàn)其目的是讓對(duì)象池通過(guò)該工廠模式創(chuàng)建管理的對(duì)象創(chuàng)建對(duì)象池實(shí)例創(chuàng)建對(duì)象池我們假設(shè)對(duì)象是一

common-pool2 使用

common-pool2提供了3中對(duì)象池管理方式,它們的使用方式基本一樣,這里以GenericObjectPool對(duì)象池為例介紹其使用方式,一般實(shí)現(xiàn)自己的對(duì)象池需要經(jīng)過(guò)2個(gè)步驟

實(shí)現(xiàn)PooledObjectFactory接口:該接口是一種工廠模式,實(shí)現(xiàn)其目的是讓對(duì)象池通過(guò)該工廠模式創(chuàng)建管理的對(duì)象

創(chuàng)建對(duì)象池(GenericObjectPool(PooledObjectFactory))實(shí)例

創(chuàng)建Conn對(duì)象池

我們假設(shè)Conn對(duì)象是一個(gè)建立TCP連接的對(duì)象,該對(duì)象的初始化時(shí)間平均為500ms,為了避免在程序中頻繁創(chuàng)建Conn對(duì)象,我們需要借助對(duì)象池管理Conn對(duì)象實(shí)例

import org.slf4j.LoggerFactory;

/**
 * common-pool2 使用方式
 * 

* 假設(shè)這是一個(gè)建立TCP連接的對(duì)象,該對(duì)象的初始化時(shí)間平均為500ms,為了避免在程序中頻繁創(chuàng)建Conn對(duì)象,我們需要借助對(duì)象池管理Conn對(duì)象實(shí)例 * * @author WangJun * @version 1.0 15/10/28 * @since 1.6 */ public class Conn { /** * 記錄對(duì)象的創(chuàng)建時(shí)間 */ private long createTime; /** * 初始化Conn對(duì)象,模擬創(chuàng)建Conn對(duì)象平均消耗500ms * @throws InterruptedException */ public Conn() throws InterruptedException { Thread.sleep(500); createTime = System.currentTimeMillis(); LoggerFactory.getLogger(getClass()).debug(" init conn suc... " + createTime); } /** * 報(bào)告Conn對(duì)象信息 */ public void report() { LoggerFactory.getLogger(getClass()).info("this is a available conn " + createTime); } }

利用工廠模式,使對(duì)象池通過(guò)該工廠模式創(chuàng)建管理的對(duì)象
    package com.peaceful.pool.demo;
    
    import org.apache.commons.pool2.BasePooledObjectFactory;
    import org.apache.commons.pool2.PooledObject;
    import org.apache.commons.pool2.PooledObjectFactory;
    import org.apache.commons.pool2.impl.DefaultPooledObject;
    
    /**
     * common-pool2 使用方式
     * 

* 為了使用common-pool2對(duì)象池管理,我們必須實(shí)現(xiàn){@link org.apache.commons.pool2.PooledObjectFactory}或者其子類 * 這是一個(gè)工廠模式,告訴對(duì)象池怎樣去創(chuàng)建要管理的對(duì)象 *

* BasePooledObjectFactory 是對(duì){@link org.apache.commons.pool2.PooledObjectFactory}的一個(gè)基本實(shí)現(xiàn),我們可以繼承該類,減少一些方法的實(shí)現(xiàn) *

* 在實(shí)現(xiàn){@link org.apache.commons.pool2.PooledObjectFactory}接口時(shí),我們一定要實(shí)現(xiàn)的接口方法是{@link PooledObjectFactory#makeObject()}方法。 * * @author WangJun * @version 1.0 15/10/28 * @since 1.6 */ public class ConnFactory extends BasePooledObjectFactory { /** * 間接實(shí)現(xiàn){@link PooledObjectFactory#makeObject()}方法,表明怎樣創(chuàng)建需要管理對(duì)象 */ @Override public Conn create() throws Exception { return new Conn(); } /** * 在common-pool2中為了統(tǒng)計(jì)管理的對(duì)象的一些信息,比如調(diào)用次數(shù),空閑時(shí)間,上次使用時(shí)間等,需要對(duì)管理的對(duì)象進(jìn)行包裝,然后在放入到對(duì)象池中 * * @param obj 對(duì)象池要管理的對(duì)象 * @return 返回包裝后的PooledObject對(duì)象 */ @Override public PooledObject wrap(Conn obj) { return new DefaultPooledObject(obj); } }

為了模擬的更真實(shí),ConnPool池可以讓使用者個(gè)性化配置
    package com.peaceful.pool.demo;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    
    /**
     * common-pool2 使用方式
     * 

* {@link org.apache.commons.pool2.impl.GenericObjectPool}支持個(gè)性化配置,我們可以配置對(duì)象池中總共的對(duì)象數(shù),最大、最小空閑對(duì)象數(shù)等等 * 這邊繼承{@link GenericObjectPoolConfig}是為了ConnPool也可以進(jìn)行個(gè)性化的配置 * * @author WangJun * @version 1.0 15/10/28 * @since 1.6 */ public class ConnPoolConfig extends GenericObjectPoolConfig { public ConnPoolConfig() { // defaults to make your life with connection pool easier :) setMinIdle(5); setTestOnBorrow(true); } }

有了創(chuàng)建對(duì)象的工廠,我們就可以創(chuàng)建一個(gè)對(duì)象池實(shí)例
    package com.peaceful.pool.demo;
    
    import org.apache.commons.pool2.impl.GenericObjectPool;
    
    /**
     * common-pool2 使用方式
     * 

* Conn對(duì)象管理池,這里利用GenericObjectPool作為對(duì)象池 * * @author WangJun * @version 1.0 15/10/28 * @since 1.6 */ public class ConnPool extends GenericObjectPool { /** * 調(diào)用{@link GenericObjectPool}的構(gòu)造方法,構(gòu)造ConnPool */ public ConnPool() { super(new ConnFactory(), new ConnPoolConfig()); } /** * 調(diào)用{@link GenericObjectPool}的構(gòu)造方法,構(gòu)造ConnPool */ public ConnPool(ConnPoolConfig connPoolConfig) { super(new ConnFactory(), connPoolConfig); } }

這樣一個(gè)就完成了整個(gè)ConnPool的編碼,下面我們?cè)趯?xiě)一個(gè)demo,演示使用ConnPool
    public class ConnDemo {
    
        public static void main(String[] args) throws Exception {
            ConnPoolConfig connPoolConfig = new ConnPoolConfig();
            connPoolConfig.setMinIdle(5);
            connPoolConfig.setMaxIdle(8);
            ConnPool connPool = new ConnPool(connPoolConfig);
            Conn conn1 = connPool.borrowObject();
            Conn conn2 = connPool.borrowObject();
            Conn conn3 = connPool.borrowObject();
            Conn conn4 = connPool.borrowObject();
            Conn conn5 = connPool.borrowObject();
            conn1.report();
            connPool.returnObject(conn1);
            conn2.report();
            connPool.returnObject(conn2);
            conn3.report();
            connPool.returnObject(conn3);
            conn4.report();
            connPool.returnObject(conn4);
            conn5.report();
            connPool.returnObject(conn5);
    
            conn5.report();
    
            // 被歸還的對(duì)象的引用,不可以在次歸還
            // java.lang.IllegalStateException: Object has already been retured to this pool or is invalid
            try {
                connPool.returnObject(conn5);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

下面是ConnDemo的運(yùn)行結(jié)果

[2015-10-28 14:56:06 DEBUG]  {com.peaceful.pool.demo.Conn:18}- init conn suc...
[2015-10-28 14:56:07 DEBUG]  {com.peaceful.pool.demo.Conn:18}- init conn suc...
[2015-10-28 14:56:07 DEBUG]  {com.peaceful.pool.demo.Conn:18}- init conn suc...
[2015-10-28 14:56:08 DEBUG]  {com.peaceful.pool.demo.Conn:18}- init conn suc...
[2015-10-28 14:56:08 DEBUG]  {com.peaceful.pool.demo.Conn:18}- init conn suc...
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015366746
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015367346
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015367853
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015368354
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015368860
[2015-10-28 14:56:08 INFO ]  {com.peaceful.pool.demo.Conn:22}-this is a available conn 1446015368860
java.lang.IllegalStateException: Object has already been retured to this pool or is invalid
    at org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:595)
    at com.peaceful.pool.demo.ConnDemo.main(ConnDemo.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/64712.html

相關(guān)文章

  • common pool2

    摘要:?jiǎn)卫c對(duì)象池的區(qū)別首先單例和對(duì)象池的目的都是為了避免頻繁的創(chuàng)建對(duì)象帶來(lái)的系統(tǒng)的開(kāi)銷。池借組與引用可以在內(nèi)存吃緊時(shí)被自動(dòng)回收來(lái)管理對(duì)象池中的對(duì)象,它可以隨著對(duì)對(duì)象的需要而不斷增加。 common-pool2 池技術(shù) 池技術(shù),主要用于管理對(duì)象,做到對(duì)象可以重用,避免多次創(chuàng)建對(duì)象的開(kāi)銷,是一種比較常用的技術(shù)。比如DB數(shù)據(jù)源的連接池。 在Java中頻繁的創(chuàng)建對(duì)象和銷毀對(duì)象都會(huì)消耗性能。為了避免...

    jsyzchen 評(píng)論0 收藏0
  • Java四種引用類型

    摘要:四種引用類型在中,類型就分為兩種,基本類型和引用類型或自定義類型。軟引用可用來(lái)實(shí)現(xiàn)內(nèi)存敏感的高速緩存。一般用法是程序可以通過(guò)判斷引用隊(duì)列中是否已經(jīng)加入了虛引用,來(lái)了解被引用的對(duì)象是否將要被垃圾回收。 Java四種引用類型 在java中,類型就分為兩種,基本類型和引用類型或自定義類型。 引用類型又分為四種: 強(qiáng)引用 StrongReference 軟引用 SoftReference 若...

    chuyao 評(píng)論0 收藏0
  • JAVA數(shù)據(jù)庫(kù)連接池總結(jié)

    摘要:目前主流的數(shù)據(jù)庫(kù)連接池有等幾種。默認(rèn)值初始化連接池中的連接數(shù),取值應(yīng)在與之間,默認(rèn)為最大空閑時(shí)間秒內(nèi)未使用則連接被丟棄。當(dāng)連接池中的連接耗盡的時(shí)候一次同時(shí)獲取的連接數(shù)。每秒檢查所有連接池中的空閑連接。 一、數(shù)據(jù)庫(kù)連接池 數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)緩沖池,預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需要從緩沖池中取出一個(gè),使用完之后在放回去,節(jié)省連接建...

    xioqua 評(píng)論0 收藏0
  • hudson+gradle+git+maven(非必選)持續(xù)集成 (二)

    摘要:第二集非必選持續(xù)集成編譯打包部署到線上環(huán)境集成前言在持續(xù)集成第一集中講解了關(guān)于如果編譯,打包,發(fā)布包到私服。在下面一集中,也就是第二集中,開(kāi)始講解如何持續(xù)集成可運(yùn)行的服務(wù)包到測(cè)試和正式環(huán)境。 第二集 hudson+gradle+git+maven(非必選)持續(xù)集成編譯,打包,部署到線上環(huán)境集成 前言 在持續(xù)集成第一集中,講解了關(guān)于如果編譯,打包,發(fā)布jar包到maven私服。在下面一集...

    william 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<