GenericObjectPool阈值

时间:2013-02-20 16:51:53

标签: java multithreading spring threadpool

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的配置?

1 个答案:

答案 0 :(得分:0)

我意识到我的设置没问题。由于没有再次创建线程,因此只有Object没有返回池。