`
85977328
  • 浏览: 1871012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

commons-pool-1.6.0对象池技术

 
阅读更多
1.6和1.5最大的区别是支持泛型,编程比较方便

池的大小是初始化配置的,
在没有显式配置指定的情况下,
池大小默认为8.
可以通过GenericKeyedObjectPool.Config来配置。

下面给出2个例子,大家可以自行运行,或者跟贴留言,我来解答

根据key获取对象
package com.panguso.phl;

import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
import org.apache.commons.pool.impl.GenericKeyedObjectPool;

/**
1、复杂对象应该实现equals() 、hashCode()方法,以便不重复入池。
2、试图将null入池,不会成功的,但也不抛异常。
3、对于池对象,使用应该遵循“接而有还,再借不难”-----从池中获取,不用时候归池,否则当池中没有空闲可用的对象时候,程序会处于等待状态,如果没有显式的调用归还方法,则造成程序死锁。
 * @author piaohailin
 *
 */
public class TestGenericKeyedObjectPool {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        //创建一个对象池 
        GenericKeyedObjectPool<Integer, String> pool = new GenericKeyedObjectPool<Integer, String>(new BaseKeyedPoolableObjectFactory<Integer, String>() {
            @Override
            public String makeObject(Integer o) throws Exception {
                return String.valueOf(o);
            }
        });

        //清除最早的对象 
        pool.clearOldest();

        //添加对象到池,重复的不会重复入池 
        for (int i = 0; i < 5; i++) {
            pool.addObject(i);
        }

        //获取并输出对象 
        for (int i = 0; i < 10; i++) {
            System.out.println(pool.borrowObject(i));
        }
        System.out.println("==========");
        //输出池状态 
        System.out.println("pool.getMaxIdle()=" + pool.getMaxIdle());
        System.out.println("pool.getMaxActive()=" + pool.getMaxActive());

    }

}


无参获取对象
package com.panguso.phl;

import java.util.Random;

import org.apache.commons.pool.BasePoolableObjectFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool.Config;

public class TestGenericObjectPool {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        config.maxActive = 100;
        config.maxWait = 3000; //设置这个,会抛Exception in thread "main" java.util.NoSuchElementException: Timeout waiting for idle object
        GenericObjectPool<Float> pool = new GenericObjectPool<Float>(new BasePoolableObjectFactory<Float>() {
            public Float makeObject() throws Exception {
                return new Random().nextFloat();
            }
        }, config);

//        for (int i = 0; i < 10000; i++) {
//            pool.addObject();
//        }
        for (int i = 0; i < 10000; i++) {
            System.out.println(System.currentTimeMillis());
            Float f = pool.borrowObject();
            System.out.println(f);
            System.out.println(System.currentTimeMillis());
        }

        Float f = pool.borrowObject();
        System.out.println(f);
        pool.returnObject(f);

        Float o1 = pool.borrowObject();
        System.out.println(o1);

        Float o2 = pool.borrowObject();
        System.out.println(o2);

        Float o3 = pool.borrowObject();
        System.out.println(o3);

        Float o4 = pool.borrowObject();
        System.out.println(o4);

        Float o5 = pool.borrowObject();
        System.out.println(o5);

        Float o6 = pool.borrowObject();
        System.out.println(o6);

        Float o7 = pool.borrowObject();
        System.out.println(o7);

        Float o8 = pool.borrowObject();
        System.out.println(o8);

        pool.returnObject(o1);
        pool.returnObject(o2);
        pool.returnObject(o3);
        pool.returnObject(o4);
        pool.returnObject(o5);
        pool.returnObject(o6);
        pool.returnObject(o7);
        pool.returnObject(o8);

        Float o9 = pool.borrowObject();
        System.out.println(o9);
        pool.returnObject(o9);

        Float o10 = pool.borrowObject();
        System.out.println(o10);
        pool.returnObject(o10);

        Float o11 = pool.borrowObject();
        System.out.println(o11);
        pool.returnObject(o11);

        Float o12 = pool.borrowObject();
        System.out.println(o12);
        pool.returnObject(o12);

        Float o13 = pool.borrowObject();
        System.out.println(o13);
        pool.returnObject(o13);

    }
}
分享到:
评论

相关推荐

    java连接池有关jar:commons-pool-1.2.jar+commons-pool-1.3.jar+commons-pool.jar

    commons-pool-1.3.jar+commons-pool.jar;java连接池jar包java连接池;java连接池jar;commons-pool-1.2.jar;commons-pool-1.3.jar+commons-pool.jar;java连接池jar包java连接池;java连接池jar;commons-pool-1.2.jar;...

    开发工具 commons-pool2-2.4.2

    开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发工具 commons-pool2-2.4.2开发...

    commons-pool2-2.3-API文档-中文版.zip

    赠送jar包:commons-pool2-2.3.jar; 赠送原API文档:commons-pool2-2.3-javadoc.jar; 赠送源代码:commons-pool2-2.3-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.3.pom; 包含翻译后的API文档:...

    commons-pool.jar

    commons-pool-1.1.jar, commons-pool-1.2.jar, commons-pool-1.3-src.jar, commons-pool-1.3.jar, commons-pool-1.4.jar, commons-pool-1.5.1.jar, commons-pool-1.5.2-sources.jar, commons-pool-1.5.2.jar, ...

    commons-pool2-2.0-API文档-中文版.zip

    赠送jar包:commons-pool2-2.0.jar; 赠送原API文档:commons-pool2-2.0-javadoc.jar; 赠送源代码:commons-pool2-2.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.0.pom; 包含翻译后的API文档:...

    commons-pool2-2.10.0-API文档-中文版.zip

    赠送jar包:commons-pool2-2.10.0.jar; 赠送原API文档:commons-pool2-2.10.0-javadoc.jar; 赠送源代码:commons-pool2-2.10.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.10.0.pom; 包含翻译后的API...

    commons-pool2-2.10.0-API文档-中英对照版.zip

    赠送jar包:commons-pool2-2.10.0.jar; 赠送原API文档:commons-pool2-2.10.0-javadoc.jar; 赠送源代码:commons-pool2-2.10.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.10.0.pom; 包含翻译后的API...

    commons-pool2-2.4.3-API文档-中文版.zip

    赠送jar包:commons-pool2-2.4.3.jar; 赠送原API文档:commons-pool2-2.4.3-javadoc.jar; 赠送源代码:commons-pool2-2.4.3-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.4.3.pom; 包含翻译后的API文档...

    commons-pool2-2.11.1-bin.zip

    DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...

    commons-pool2-2.5.0-API文档-中英对照版.zip

    赠送jar包:commons-pool2-2.5.0.jar; 赠送原API文档:commons-pool2-2.5.0-javadoc.jar; 赠送源代码:commons-pool2-2.5.0-sources.jar; 包含翻译后的API文档:commons-pool2-2.5.0-javadoc-API文档-中文...

    commo-pool, commons-pool commons-pool commons-pool

    commo-pool, commons-pool commons-pool commons-pool

    commons-pool-1.5.6-bin.zip

    Apache commons-pool本质上是"对象池",即通过一定的规则来维护对象集合的容器;commos-pool在很多场景中,用来实现"连接池"/"任务worker池"等,大家常用的dbcp数据库连接池,也是基于commons-pool实现.

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    commons-pool-1.6-API文档-中文版.zip

    赠送jar包:commons-pool-1.6.jar; 赠送原API文档:commons-pool-1.6-javadoc.jar; 赠送源代码:commons-pool-1.6-sources.jar; 赠送Maven依赖信息文件:commons-pool-1.6.pom; 包含翻译后的API文档:commons-...

    commons-pool.jar maven下载

    commons-pool.jar1.6.0版

    commons-pool-1.6.jar

    commons-pool-1.6.jar DBCP数据库连接池必不可少的jar包

    commons-dbcp-1.4和commons-pool-1.6驱动包下载(亲测可用)

    commons-dbcp-1.4和commons-pool-1.6驱动包下载(亲测可用)

    commons-dbcp-1.2.2.jar和commons-pool-1.3.jar包

    commons-dbcp-1.2.2.jar和commons-pool-1.3.jar包,数据源包

    commons-pool-1.5.4-API文档-中英对照版.zip

    赠送jar包:commons-pool-1.5.4.jar; 赠送原API文档:commons-pool-1.5.4-javadoc.jar; 赠送源代码:commons-pool-1.5.4-sources.jar; 赠送Maven依赖信息文件:commons-pool-1.5.4.pom; 包含翻译后的API文档:...

    commons-pool-1.6.jar、commons-pool

    都是自己项目积累下来的jar 真正的好用的jar 第一:commons-pool-1.3.jar 第二:commons-pool-1.5.4.jar 第三:commons-pool-1.6.jar 第四:commons-pool2-2.1.jar

Global site tag (gtag.js) - Google Analytics