处理apache commons-pool中的饥饿

时间:2016-03-17 10:35:35

标签: java apache-commons-pool

我正在使用1.6版本的apache commons-pool库。根据javadoc,

whenExhaustedAction指定池耗尽时borrowObject()方法的行为: 它可以是WHEN_EXHAUSTED_FAIL,WHEN_EXHAUSTED_GROW或WHEN_EXHAUSTED_BLOCK。

我想使用borrowObject,如果没有在指定的时间范围内获取对象,我需要某种句柄来处理场景(就像我将重新安排任务一样,如果我不这样做的话)获取目标对象)

但是我唯一的选择是NoSuchElementException,这是一个RuntimeException,我需要捕获并处理错误场景。我对捕获RuntimeException

持怀疑态度

这是使用GenericObjectPool处理对象饥饿的预期方法还是我还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

我查看了borrowObject documentation,并声明它会抛出这些异常

IllegalStateException - after close has been called on this pool.
Exception - when makeObject throws an exception.
NoSuchElementException - when the pool is exhausted and cannot or will not return another instance.

由于NoSuchElementException是此方法的记录行为,因此在borrowObject上捕捉它并根据您的喜好进行处理没有任何问题。

我建议你在调用周围捕获它并用你自己的一个包装,所以如果函数中的其他方法抛出NoSuchElementException,则高级处理程序不会与池耗尽混淆。根据您的偏好和项目要求,可以检查包装器异常或运行时异常。

e.g

final T obj;

try
{
  obj = pool.borrowObject( );
}
catch ( NoSuchElementException ex )
{
  throw new MyPoolExhausetdException( ex );
}

// Do something with obj