我一直在寻找在我的应用程序的一部分中实现池化。我想使用 Commons Pool 库,但有点担心这种close()
行为是如何工作的。从查看 javadocs 和源代码来看,似乎并不清楚在close()
调用该方法时是否会销毁池中创建的对象。据我所知,只有池中空闲的对象才会被销毁——任何正在使用但尚未返回的对象都不会被触及。
我在这里错过了什么吗?我想确保在池关闭时所有对象都被正确销毁。
有人以前用过这个并且知道它是如何工作的吗?
我一直在寻找在我的应用程序的一部分中实现池化。我想使用 Commons Pool 库,但有点担心这种close()
行为是如何工作的。从查看 javadocs 和源代码来看,似乎并不清楚在close()
调用该方法时是否会销毁池中创建的对象。据我所知,只有池中空闲的对象才会被销毁——任何正在使用但尚未返回的对象都不会被触及。
我在这里错过了什么吗?我想确保在池关闭时所有对象都被正确销毁。
有人以前用过这个并且知道它是如何工作的吗?
一般来说(不管池库如何),销毁正在使用的对象是不安全的。这样做很可能会导致异常。如果您想保证完全关闭,那么您需要确保所有对象都已返回到池中。
在所有对象都返回池之前,您是否有理由关闭?
正如close
Commons Pool 2 中的方法的 javadoc 中所述,当调用此方法时,空闲实例被销毁,但检出到客户端的实例不受影响。之后close
,borrowObject
将失败IllegalStateException
,但returnObject
会成功,返回的实例在返回时被销毁。因此,如果您的客户可以在您关闭池后返回对象,那么实例将被清理。如果您想在完成之前阻止,请观看numActive
。 close
还从 jmx 注销池,因此getNumActive
在这种情况下直接使用。