`
85977328
  • 浏览: 1899057 次
  • 性别: 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);

    }
}
分享到:
评论

相关推荐

    commons-pool.jar maven下载

    commons-pool.jar1.6.0版

    org.apache.commons 常用jar 以及部分源码

    commons-pool-1.3.jar commons-net-3.0.jar commons-logging-api-1.1.jar commons-logging-1.0.4.jar commons-lang-2.1.jar commons-io-1.3.2.jar commons-httpclient-3.0.jar commons-fileupload-1.2.1.jar commons...

    quartz-1.6.0.jar

    quartz-1.6.0.jar 集成了quartz发现不执行job,也没有错误信息,搞了半天缺少依赖包 commons-beanutils.jar commons-collections-3.1.jar commons-dbcp-1.2.1.jar ...commons-pool-1.2.jar commons-validator-1.1.4.jar

    spring-session-redis/spring整合redis管理session依赖jar包

    commons-pool2-2.3.jar,jedis-2.8.0.jar,spring-data-redis-1.6.0.RELEASE.jar,spring-session-1.1.1.RELEASE.jar,Spring-data-redis(Version 1.6.0.RC1)中文版.pdf

    javaweb项目常用jar包

    commons-pool-1.6.jar DataCenter-util-0.0.1-20161202.072205-3.jar DmDialect-for-hibernate4.0-jdk1.6.jar dom4j-1.6.1.jar elasticache-java-cluster-client-1.0.61.0.jar ezmorph-1.0.6.jar freemarker-...

    Spring Quartz定时器的jar包

    `commons-pool.jar`是Apache Commons Pool,它是Java对象池设计模式的一个实现。对象池可以避免频繁创建和销毁对象带来的开销,提高系统性能。在DBCP中,这个库被用来实现数据库连接的池化管理。它提供了对象池的...

    redis安装包,jar包

    里面包含了redis需要的服务端包reids-3.2.9.tar.gz,commons-pool2-2.2.4.2.jar,jedis-2.9.0.jar,spring-data-redis-1.6.0.RELEASE.jar

    quartz手动测试需要的jar

    6. **commons-pool-1.5.4.jar**:Apache Commons Pool是对象池设计模式的实现,与DBCP一起工作,用于管理数据库连接的池化。 7. **slf4j-api-1.6.0.jar**:Simple Logging Facade for Java (SLF4J) 是一个日志抽象...

    java_memcached-release_2.6.3.rar 客户端所有包

    - `commons-pool-1.5.5.jar`:Apache Commons Pool是对象池设计模式的实现,用于高效管理可重用资源,如数据库连接池中的连接。 - `java_memcached-release_2.6.3.jar`:这是Java Memcached客户端的主要库,包含...

    java开发常用jar包

    commons-dbcp.jar commons-pool-1.2.jar DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 ...

    jar包的使用

    这些`jar`包通常依赖于`commons-collections.jar`和`commons-pool-1.2.jar`。 #### 二、利用Hibernate进行对象关系映射 Hibernate是一个流行的ORM(Object-Relational Mapping)框架,它能够将Java对象映射到...

    基于tomcat的redis配置

    commons-pool2-2.3.jar tomcat-redis-session-manager-jre7-tomcat6.jar smartcard中的代码需要修改,redis放值时不能为空 //保存sysOrg中工号所属地市区县 Struts2Utils.getSession().setAttribute(Constants....

Global site tag (gtag.js) - Google Analytics