GenericObjectPool配置为12个线程。一旦12个线程用尽,我发现调用者线程变为僵尸。我认为默认行为是排队额外的请求并在可用时提供服务,而不是杀死调用者线程。

private ImplClass implObject;

for (Iterator iter = anArrayList.iterator(); iter.hasNext();) {

    //Gets a GenericObjectPool Object
    implObject = (ImplClass) this.getImplPool().borrowObject();

    some code

}


我已经尝试了以下两种配置池的配置。对我来说,阻塞是好的,只要它可以从借位语句恢复并在循环内处理其下方的行即可。

 <bean id="ImplPool" class="org.apache.commons.pool.impl.GenericObjectPool">
    <constructor-arg>
        <ref local="ImplFactory"/>
    </constructor-arg>
    <constructor-arg>
        <value>12</value>
    </constructor-arg>
</bean>



<bean id="ImplPool" class="org.apache.commons.pool.impl.GenericObjectPool">
    <constructor-arg>
        <ref local="ImplFactory"/>
    </constructor-arg>
    <constructor-arg>
        <value>12</value>
    </constructor-arg>
<constructor-arg>
         <bean id="org.apache.commons.pool.impl.GenericObjectPool.WHEN_EXHAUSTED_BLOCK"
         class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
    </constructor-arg>
<constructor-arg>
        <value>-1</value>
    </constructor-arg>
</bean>


您能否为达到阈值的阻塞GenericObjectPool建议一个配置?

最佳答案

我意识到我的设置还可以。由于没有再次创建线程,因此没有将对象仅返回到池中。

10-08 11:26