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