1

已弃用的 CommonPoolTargetSource 具有一组可以使用setWhenExhaustedActionName()定义的行为。它包装的 CommonsPool2TargetSource 和 CommonsPool2 BaseGenericObjectPool将“getBlockWhenExhausted”描述为

返回当pool耗尽时调用borrowObject()方法时是否阻塞

我想了这么多!否则这有什么作用?

当您将 CommonsPool 设置为“WHEN_EXHAUSTED_GROW”时,池是否会扩展,还是只是抛出异常?怎么了?

4

1 回答 1

0

如ObjectPool.borrowObject()文档中所述,耗尽时的行为取决于实现。

当池已用完时此方法的行为没有严格指定(尽管它可能由实现指定)。

GenericObjectPool如果为真,CommonsPool2 提供的实现将阻塞,否则getBlockWhenExhausted()立即抛出异常NoSuchElementException。(如GenericObjectPoolborrowObject(long borrowMaxWaitMillis)中所述)

如果池耗尽(没有可用的空闲实例并且没有创建新实例的能力),则此方法将阻塞(如果 BaseGenericObjectPool.getBlockWhenExhausted() 为真)或抛出 NoSuchElementException(如果 BaseGenericObjectPool.getBlockWhenExhausted() 为假)。当 BaseGenericObjectPool.getBlockWhenExhausted() 为 true 时,此方法将阻塞的时间长度由传递给 borrowMaxWaitMillis 参数的值确定。

与“WHEN_EXHAUSTED_GROW”类似的行为不可用,并且很可能通过将 maxTotal 设置为来达到,-1因此池根本不会耗尽​​。

于 2017-06-19T12:37:21.090 回答