2016-03-17 68 views
3

我使用的是1.6版本的Apache commons-pool库。按照Javadoc中,在Apache公共池中处理饥饿

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

我想使用borrowObject,如果不在指定的时间范围内获取对象,我需要某种类型的句柄来处理场景(比如我将重新计划任务,如果我没有获得目标对象)

但我唯一的选择是NoSuchElementException,它是一个RuntimeException,我需要捕获并处理错误情况。我很怀疑捕捉RuntimeException

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

回答

2

我已经看过了borrowObjectdocumentation,并且声明它抛出这些异常

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