Apache Commons Pool
Apache Commons Pool 开源软件库提供了一个对象池API和一系列对象池实现。Apache Commons Pool 2.x与1.x相比实现了一个可重写的对象池实现。另外,性能和可伸缩性也有了改进,2.x版本包含鲁棒的实例追踪和对象池监控。2.x版本需要JDK6以上版本。
http://commons.apache.org/proper/commons-pool/download_pool.cgi
PooledObjectFactory
PooledObjectFactory 提供了一个管理对象池对象生命周期的通用接口。
public interface PooledObjectFactory<T> {
PooledObject<T> makeObject();
void activateObject(PooledObject<T> obj);
void passivateObject(PooledObject<T> obj);
boolean validateObject(PooledObject<T> obj);
void destroyObject(PooledObject<T> obj);
}
1.x版Commons Pool的用户会注意到,虽然1.x池使用的PoolableObjectFactory可以直接创建和管理池化的对象,而版本2 PooledObjectFactory可以创建和管理 PooledObject。这些对象包装器维护对象池状态,使PooledObjectFactory方法可以访问数据,例如实例创建时间或上次使用时间。提供了 DefaultPooledObject,具有用于合并状态方法的自然实现。实现PoolableObjectFactory的最简单方法 是对其进行扩展 BasePooledObjectFactory。这个工厂提供了一个 makeObject(),它返回 wrap(create()) ,其中 create和 wrap是抽象的。您提供 create的实现, 以创建要在池中管理的基础对象,并包装以将创建的实例包装在 PooledObject中。要使用 DefaultPooledObject包装器,请使用
@Override
public PooledObject<Foo> wrap(Foo foo) {
return new DefaultPooledObject<Foo>(foo);
}
其中Foo是池中对象的类型(create()的返回类型)。
KeyedPooledObjectFactory 定义了一个类似的接口 KeyedObjectPool S:
public interface KeyedPoolableObjectFactory<K,V> {
PooledObject<V> makeObject(K key);
void activateObject(K key, PooledObject<V> obj);
void passivateObject(K key, PooledObject<V> obj);
boolean validateObject(K key, PooledObject<V> obj);
void destroyObject(K key, PooledObject<V> obj);
}
BaseKeyedPooledObjectFactory 提供的抽象基本实现 KeyedPooledObjectFactory。
所述 org.apache.commons.pool2.impl 包提供一些池实现。
GenericObjectPool
GenericObjectPool 提供了多种配置选项,包括限制空闲或活动实例的数量,在实例在池中处于空闲状态时驱逐实例等功能。从版本2开始, GenericObjectPool 还提供了废弃实例跟踪和删除。
GenericKeyedObjectPool 为键控池提供相同的行为。
SoftReferenceObjectPool
SoftReferenceObjectPool 可以根据需要增长,但允许垃圾收集器根据需要从池中驱逐空闲实例。
更新时间:2024-10-26 16:27