2013-02-20 60 views
1

GenericObjectPool配置为12个线程。一旦12个线程耗尽,我发现主叫线程僵尸。我认为默认行为是排队额外的请求,并提供一次可用,而不是杀死调用者线程。GenericObjectPool阈值

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达到阈值?

+0

你在使用什么框架? – 75inchpianist 2013-02-20 16:53:16

+0

spring 2 + executor – fortm 2013-02-20 16:55:50

+0

我认为你的第二个配置是可以的。 “主叫线程僵尸”意味着什么?你如何检查线程状态? – ericson 2013-02-22 14:08:35

回答

0

我意识到我的设置是好的。只有对象没有被返回到池,因为没有再次创建线程。