我正在使用1.6版本的apache commons-pool库。根据javadoc,
whenExhaustedAction指定池耗尽时borrowObject()方法的行为: 它可以是WHEN_EXHAUSTED_FAIL,WHEN_EXHAUSTED_GROW或WHEN_EXHAUSTED_BLOCK。
我想使用borrowObject,如果没有在指定的时间范围内获取对象,我需要某种句柄来处理场景(就像我将重新安排任务一样,如果我不这样做的话)获取目标对象)
但是我唯一的选择是NoSuchElementException,这是一个RuntimeException,我需要捕获并处理错误场景。我对捕获RuntimeException
持怀疑态度这是使用GenericObjectPool处理对象饥饿的预期方法还是我还有其他选择吗?
答案 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