2017-02-02 1 views
1

Le CommonPoolTargetSource obsolète avait un ensemble de comportements que vous pouviez définir en utilisant setWhenExhaustedActionName(). Le CommonsPool2TargetSource et le CommonsPool2 BaseGenericObjectPool il enveloppements décrire « getBlockWhenExhausted » commeQue fait CommonsPool2TargetSource si vous désactivez blockWhenExhausted?

retour si vous souhaitez bloquer lorsque la méthode borrowObject() est appelée lorsque la piscine est épuisé

je me suis dit que ça dehors! Qu'est-ce que cela fait autrement?

Est-ce que le pool est développé comme lorsque vous avez défini CommonsPool sur "WHEN_EXHAUSTED_GROW" ou lance-t-il simplement une exception? Ce qui se produit?

Répondre

0

Comme indiqué dans la documentation de ObjectPool.borrowObject() comportement dépend de l'implémentation.

Le comportement de cette méthode lorsque la piscine a été épuisé est pas strictement spécifiée (bien qu'il peut être spécifié par les implémentations).

La mise en œuvre GenericObjectPool fourni avec CommonsPool2 bloquera si getBlockWhenExhausted() est vrai et immédiatement lancer une NoSuchElementException autrement. (Comme indiqué dans GenericObjectPoolborrowObject(long borrowMaxWaitMillis))

Si la piscine est épuisé (aucun cas d'inactivité disponible et aucune capacité à créer de nouveaux), cette méthode soit bloc (si BaseGenericObjectPool.getBlockWhenExhausted() est vrai) ou lancer une NoSuchElementException (si BaseGenericObjectPool.getBlockWhenExhausted() est faux). La durée de blocage de cette méthode lorsque BaseGenericObjectPool.getBlockWhenExhausted() est true est déterminée par la valeur transmise au paramètre borrowMaxWaitMillis.

Un comportement similaire à « WHEN_EXHAUSTED_GROW » n'est pas disponible et est très probablement atteint par la mise maxTotal à -1, la piscine ne pouvait pas épuiser tout.