【问题标题】:GenericObjectPool thresholdGenericObjectPool 阈值
【发布时间】:2013-02-20 16:51:53
【问题描述】:

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

【问题讨论】:

  • 你用的是什么框架?
  • 我觉得你的第二个配置没问题。 caller thread goes zombie 是什么意思?如何查看线程状态?
  • 我更正了这个。问题是我没有将对象返回到池中。我后来做了一个专门的线程来将对象返回到池,并解决了这个问题。

标签: java multithreading spring threadpool


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多