当前位置: 首页 > 工具软件 > Commons Pool > 使用案例 >

commons-pool的学习

呼延承平
2023-12-01

在一些缓存,数据库的操作中总能看到commons-pool包的身影,从理论上,对一些实例化的成本的对象进行缓存,需要的时候从缓存池中拿出,可以降低应用的运行成本,提高效率,但是具体到实际中代码怎么实现,也是一知半解,简单阅读了apache官网的commons-pool的referrence,结合别人的理解,做一下笔记。
从对象的角度看,commons-pool提供了两个基本的接口,
PooledObject, 从名字上就可以知道,他是一个对象,是放在缓存池中的对象
ObjectPool,缓存池,用于存放PoolObject对象的池(有点拗口)
PooledObjectFactory,工厂类,用于生产缓存池

PoolObjectFactory的代码段

public interface PooledObjectFactory<T> {
    PooledObject<T> makeObject();  //新增对象
    void activateObject(PooledObject<T> obj);//用于从pool中借出去之前检测该对象是否处于钝化状态,
    void passivateObject(PooledObject<T> obj);//当对象被归还到池中之前执行
    boolean validateObject(PooledObject<T> obj);//在他从池中借出的之前检测对象是否可用
    void destroyObject(PooledObject<T> obj);//销毁对象
}

PooledObjectFactory必须是线程安全的,ObjectPool承诺不会将同一个object实例传递给PooledObjectFactory的多个方法。
PoolObjectFactory创建和管理PoolObject,这些PoolObject用于作为包装类包装我们要缓存的对象,包装类维持了缓存对象的状态,包装类有DefaultPooledObject,或者实现PoolableObjectFactory接口,或者抽象类BasePooledObjectFactory抽象类,包装类提供了makeObject()方法返回wrap(create()),其中wrap()和create()方法都是抽象方法,需要使用者自己扩展。
BaseKeyedPooledObjectFactory是实现KeyedPooledObjectFactory接口。
GenericObjectPool实现了ObjectPool接口,提供了丰富的缓存池操作。

 类似资料: