ObjectPool定义了一个简单的池化接口,有三个对应实现
GenericObjectPool:实现了可配置的后进先出或先进先出(LIFO/FIFO)行为,默认是做为一个后进先出队列,这意味当对象池中有可用的空闲对象时,borrowObject 将返回最近的对象实例,若是将lifo 属性设置为false,则按FIFO行为返回对象实例。
StackObjectPool :实现了后进先出(LIFO)行为。
SoftReferenceObjectPool: 实现了后进先出(LIFO)行为。另外,对象池还在SoftReference 中保存了每一个对象引用,容许垃圾收集器针对内存须要回收对象。
KeyedObjectPool定义了一个以任意的key访问对象的接口(能够池化对种对象),有两种对应实现。
GenericKeyedObjectPool :实现了先进先出(FIFO)行为。
StackKeyedObjectPool : 实现了后进先出(LIFO)行为。
PoolableObjectFactory 定义了池化对象的生命周期方法,咱们能够使用它分离被池化的不一样对象和管理对象的建立,持久,销毁。
BasePoolableObjectFactory这个实现PoolableObjectFactory 接口的一个抽象类,咱们可用扩展它实现本身的池化工厂。
一个对象池使用的简单例子:
package tf; import org.apache.commons.pool.BasePoolableObjectFactory; import org.apache.commons.pool.ObjectPool; import org.apache.commons.pool.impl.StackObjectPool; public class Pool { public static void main(String[] args) throws Exception { ObjectPool pool = new StackObjectPool(new UserFactory()); User u = (User) pool.borrowObject(); // 从池中借出一个对象 u.setName("me"); u.sayHello(); pool.returnObject(u); // 归还对象 } static class UserFactory extends BasePoolableObjectFactory { /** * 产生一个新对象 */ public Object makeObject() { return new User(); } /** * 还原对象状态 */ public void passivateObject(Object obj) { User u = (User) obj; u.clear(); } } static class User { String name; void setName(String name) { this.name = name; } void sayHello() { System.out.println("hello, " + name); } void clear() { name = ""; } } }