2013-02-20 3 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

+0

spring 2 + executor – fortm

+0

두 번째 구성이 정상이라고 생각합니다. 'caller thread goes zombie'이란 무엇을 의미합니까? 스레드 상태를 어떻게 확인합니까? – ericson

답변

0

설정이 잘되었다는 것을 알았습니다. 스레드가 다시 작성되지 않아서 오브젝트 만 풀로 리턴되지 않았습니다.