对象池的简单使用

对象池的简单使用

1.添加maven依赖

    <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.创建使用的对象

public class MyConnection {

    public void open(){
        System.out.println("open");
    }

    public void close(){
        System.out.println("close");
    }

3.集成BasePooledObjectFactory对象实现方法

public class ConnectionFactory extends BasePooledObjectFactory<MyConnection> {
    //创建连接
    @Override
    public MyConnection create() throws Exception {

        return new MyConnection();
    }
    //添加到连接池
    @Override
    public PooledObject<MyConnection> wrap(MyConnection connection) {
        return  new DefaultPooledObject<MyConnection>(connection);
    }

    /**
     * 销毁对象
     */
    @Override
    public void destroyObject(PooledObject<MyConnection> p) throws Exception {
        MyConnection connection = p.getObject();
        connection.close();
        super.destroyObject(p);
    }
 }

4.创建和配置对象池

 public static void main(String[] args) throws Exception {
        //创建对象池配置对象
        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
        //设置对象池最大容量
        genericObjectPoolConfig.setMaxTotal(10);
        //设置对象池最小容量
        genericObjectPoolConfig.setMinIdle(10);
        Long l=10L;
         //设置对象池最大等待时间  超时报错
        genericObjectPoolConfig.setMaxWaitMillis(l);
        GenericObjectPool<MyConnection> MyConnectionpool=new  GenericObjectPool<MyConnection>(new ConnectionFactory(),genericObjectPoolConfig);

        for (int i = 1; i <= 11; i++) {
              //对象池中拿走一个对象
            MyConnection a1=MyConnectionpool.borrowObject();
            if(i==5){
                 //模仿线程阻塞 循环借走11,单对象池只有10 此时达到对象上线 报错提示
                Thread.sleep(1000);
                 MyConnectionpool.returnObject(a1); //对象还给对象池方法
            }else{
                System.out.println("a"+i+"==="+a1.toString());
            }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值