/*
常用方法
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;
}
commons-pool2缓存池使用
最新推荐文章于 2025-05-26 01:25:21 发布