我想用Apache Commons Pool 2创建一个Object P池。 我用变量和方法创建了一个P对象。
我像这样创建一个PPool:
public class PPool extends GenericObjectPool<P>{
/**
* Constructor.
*
* It uses the default configuration for pool provided by
* apache-commons-pool2.
*
* @param factory
*/
public PPool(PooledObjectFactory<P> factory) {
super(factory);
}
/**
*
*
* @param factory
* @param config
*/
public PPool(PooledObjectFactory<P> factory,
GenericObjectPoolConfig config) {
super(factory, config);
}
}
之后我创建了一个PFactory:
public class PhantomJsFactory extends BasePooledObjectFactory<Phantom> {
@Override
public P create() throws Exception {
// TODO Auto-generated method stub
return new P();
}
@Override
public PooledObject<P> wrap(P phantomjs) {
// TODO Auto-generated method stub
return new DefaultPooledObject<P>(phantomjs);
}
}
现在,如果我想添加,例如,10个P对象实例,我该怎么做? 我试着用这个:
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxIdle(1);
config.setMaxTotal(10);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
pool = new PPool(new PFactory(), config);
但是现在?
答案 0 :(得分:2)
您不需要添加实例。您提供P级工厂。因此,Pool将管理对象生命周期。如果您获取了对象,则它将由池创建(如果需要)。因此,只需借用要使用的对象。
P pObject = pool.borrowObject();
请参阅说明GenericObjectPool.html#borrowObject()
请查看一些测试用例:TestGenericObjectPool.java