什么是Apache Commons Pool close()行为

时间:2009-12-17 15:35:09

标签: apache-commons pooling apache-commons-pool

我一直在寻找在我的应用程序的一部分中实现池化。我想使用Commons Pool库,但稍微关注close()行为的工作原理。通过查看javadoc和源代码,在调用close()方法时,在池中创建的对象是否会被销毁似乎并不清楚。从我所看到的,只有在池中空闲的对象才会被销毁 - 任何正在使用但尚未被返回的对象都不会被触及。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如Commons Pool 2中close方法的javadoc所述,当调用此方法时,会销毁空闲实例,但不会影响检出客户端的实例。在close之后,borrowObject将失败并显示IllegalStateException,但returnObject将成功,返回的实例将被销毁。因此,一旦关闭池,如果您的客户端可以依赖于返回对象,则实例将被清除。如果要阻止此操作,请观看numActiveclose还从jmx注销池,因此在这种情况下直接使用getNumActive