您的位置:首页 > 运维架构 > Apache

commons-pool的学习

2015-09-12 16:12 621 查看
在一些缓存,数据库的操作中总能看到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接口,提供了丰富的缓存池操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apache