1

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 をブロックするための構成を提案していただけますか?

4

1 に答える 1

0

セットアップは問題ないことがわかりました。スレッドが再作成されていないため、オブジェクトのみがプールに返されませんでした。

于 2013-03-19T17:19:28.210 に答える