对象复用池()
在第章Semaphore信号量一节中使用了信号量同步机制实现了一个简单的对象池读者可以参考相关代码在此不予重复该对象池使用一个对象数组和一个标志位布尔数组分别表示池中的对象和对象的可用性(一个对象一次只能被一个线程使用)在获取对象时在池中找到一个可用的对象(标志位为空闲)返回并将标志位设置为使用中当对象使用完成后标志位设置为空闲归还对象池等待下次使用
在实际开发中开发人员完全不必自行开发对象池在Apache中已经提供了一个Jakarta Commons Pool对象池组件可以直接使用
Jakarta Commons Pool定义的对象池接口如下
public interface ObjectPool<T> {
T borrowObject()
void returnObject(T borrowed)
}
其中borrowObject()方法从对象池中取得一个对象returnObject()方法在使用完成后将对象返回给对象池
另一个重要的接口是PoolableObjectFactory它告诉对象池如何创建一个对象如何销毁一个对象它的定义如下
public interface PoolableObjectFactory<T> {
T makeObject()
void activateObject(T obj)
void passivateObject(T obj)
boolean validateObject(T obj)
void destroyObject(T obj)
}
PoolableObjectFactory接口的方法都将被对象池回调以指导对象池在对象的生命周期中如何管理这些对象
PoolableObjectFactory接口的主要方法如下
makeObject()定义如何创建一个新的对象实例
activateObject()在对象从对象池取出前会激活这对象
passivateObject()在对象返回对象池时被调用
destroyObject()对象从对象池中被销毁时会执行这个方法
validateObject()判断对象是否可用
[] []