2017-02-02 1 views
1

Die veraltete CommonPoolTargetSource hatte eine Reihe von Verhaltensweisen, die Sie mithilfe von setWhenExhaustedActionName() definieren konnten. Die CommonsPool2TargetSource und die CommonsPool2 BaseGenericObjectPool es Wraps „getBlockWhenExhausted“ alsWas macht CommonsPool2TargetSource, wenn Sie blockWhenExhausted deaktivieren?

Returns beschreiben, ob zu blockieren, wenn die borrowObject() -Methode aufgerufen wird, wenn der Pool

erschöpft ist

ich dachte, dass viel aus! Was macht das sonst?

Wird der Pool erweitert, wenn Sie CommonsPool auf "WHEN_EXHAUSTED_GROW" setzen oder nur eine Ausnahme auslöst? Was geschieht?

Antwort

0

Wie in der Dokumentation von ObjectPool.borrowObject() Verhalten angegeben, wenn erschöpft ist Implementierung abhängig.

Das Verhalten dieser Methode, wenn der Pool erschöpft ist, ist nicht streng angegeben (obwohl es von Implementierungen angegeben werden kann).

Die GenericObjectPool Implementierung mit CommonsPool2 geliefert wird blockiert, wenn getBlockWhenExhausted() wahr ist und sofort ein NoSuchElementException sonst werfen. (Wie in GenericObjectPoolborrowObject(long borrowMaxWaitMillis) dokumentiert)

Wenn der Pool leer ist (keine verfügbaren Leerlauf-Instanzen und keine Fähigkeit, neue zu schaffen), diese Methode wird entweder Block (wenn BaseGenericObjectPool.getBlockWhenExhausted() wahr ist) oder eine NoSuchElementException werfen (Wenn BaseGenericObjectPool.getBlockWhenExhausted() falsch ist). Die Länge der Zeit, die diese Methode blockiert, wenn BaseGenericObjectPool.getBlockWhenExhausted() wahr ist, wird durch den Wert bestimmt, der an den Parameter borrowMaxWaitMillis übergeben wird. erschöpfen maxTotal zu -1 so könnte der Pool nicht gar Einstellung

Ein ähnliches Verhalten auf „WHEN_EXHAUSTED_GROW“ nicht zur Verfügung und wird höchstwahrscheinlich erreicht durch.