commons-pool2缓存池使用

/*
常用方法
borrowObject():从池中借用对象。
returnObject(T obj):将对象归还到池中。
invalidateObject(T obj):销毁池中的对象。
clear():清除池中所有空闲对象。
close():关闭对象池。    
*/
	public static void main(String[] args) throws Exception {
        GenericObjectPool<Util> pool = Util.pool();
        Util util = pool.borrowObject();
        pool.returnObject(util);

    }
    
   public static GenericObjectPool<Util> pool(){
		GenericObjectPoolConfig<Util> config = new GenericObjectPoolConfig<>();
/*
常用配置:
		最大对象数(maxTotal)
		最大空闲对象数(maxIdle)
		最小空闲对象数(minIdle)
		对象获取超时时间(maxWaitMillis)
config.setTestWhileIdle(true); // 启用空闲对象验证任务
config.setTimeBetweenEvictionRunsMillis(30000); // 每 30 秒扫描一次
config.setMinEvictableIdleTimeMillis(60000); // 空闲超过 60 秒的对象参与扫描
*/
        config.setMaxTotal(10);
        config.setMinIdle(2);
        config.setMaxIdle(5);
/*
PooledObjectFactory用于定义池化对象的生命周期管理方法。通过实现该接口,用户可以自定义对象的创建、销毁、验证、激活和钝化逻辑
*/
        GenericObjectPool<Util> p = new GenericObjectPool(new  PooledObjectFactory<Util>(){
            @Override
			//激活或初始化对象
            //每次borrowObject会触发,因为处于空闲和使用中的对象状态可能会不一致
			//常与 passivateObject() 成对使用,通过激活,钝化的方式增加不同对象状态
            public void activateObject(PooledObject<Util> pooledObject) throws Exception {
                System.out.println("activateObject");
            }
			
			 @Override
			//在对象归还到池前,钝化或清理对象
            //每次returnObject会触发
            //对象在使用完返回对象池时,如果校验失败则销毁,如果检验通过则需要先钝化对象之后再存入空闲队列
            public void passivateObject(PooledObject<Util> pooledObject) throws Exception {
                System.out.println("passivateObject");
            }

			//当对象被永久移出池(如超时、失效或显式销毁)时调用
            @Override
            public void destroyObject(PooledObject<Util> pooledObject) throws Exception {
                System.out.println("pooledObject");
            }

			//创建一个新的池化对象实例,并将其封装为 PooledObject
            @Override
            public PooledObject<Util> makeObject() throws Exception {
                System.out.println("makeObject");
                return new DefaultPooledObject(new Util()) ;
            }

			//验证对象是否仍然有效,定期检查空闲对象会使用
			//配置config.setTestOnReturn(true); 归还时验证情况下,调用returnObject会触发validateObject
            @Override
            public boolean validateObject(PooledObject<Util> pooledObject) {
                System.out.println("validateObject");
                return  pooledObject.getObject() != null;
            }
        },config );
        return p;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值