7

我一直在寻找在我的应用程序的一部分中实现池化。我想使用 Commons Pool 库,但有点担心这种close()行为是如何工作的。从查看 javadocs 和源代码来看,似乎并不清楚在close()调用该方法时是否会销毁池中创建的对象。据我所知,只有池中空闲的对象才会被销毁——任何正在使用但尚未返回的对象都不会被触及。

我在这里错过了什么吗?我想确保在池关闭时所有对象都被正确销毁。

有人以前用过这个并且知道它是如何工作的吗?

4

2 回答 2

3

一般来说(不管池库如何),销毁正在使用的对象是不安全的。这样做很可能会导致异常。如果您想保证完全关闭,那么您需要确保所有对象都已返回到池中。

在所有对象都返回池之前,您是否有理由关闭?

于 2009-12-17T15:43:50.253 回答
3

正如closeCommons Pool 2 中的方法的 javadoc 中所述,当调用此方法时,空闲实例被销毁,但检出到客户端的实例不受影响。之后closeborrowObject将失败IllegalStateException,但returnObject会成功,返回的实例在返回时被销毁。因此,如果您的客户可以在您关闭池后返回对象,那么实例将被清理。如果您想在完成之前阻止,请观看numActiveclose还从 jmx 注销池,因此getNumActive在这种情况下直接使用。

于 2017-07-23T16:58:44.237 回答