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 可以根据需要增长,但允许垃圾收集器根据需要从池中驱逐空闲实例。

作者:Jeebiz  创建时间:2020-06-03 20:17
 更新时间:2023-12-22 21:08