使用Apache Commons Pool 2在池中添加对象

时间:2014-11-12 08:57:34

标签: java apache-commons-pool

我想用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);

但是现在?

1 个答案:

答案 0 :(得分:2)

您不需要添加实例。您提供P级工厂。因此,Pool将管理对象生命周期。如果您获取了对象,则它将由池创建(如果需要)。因此,只需借用要使用的对象。

P pObject = pool.borrowObject();

请参阅说明GenericObjectPool.html#borrowObject()

请查看一些测试用例:TestGenericObjectPool.java