Java 是雅加达';共享池对象安全吗?

Java 是雅加达';共享池对象安全吗?,java,apache-commons-pool,Java,Apache Commons Pool,我正在使用Jakarta commons-pool-1.5.6.jar。我有两个相同类型对象的不同池(例如:汽车)。这是防止对象返回池的一种方法吗 以下是一个示例: //CarPool extends BaseObjectPool CarPool carPoolA = new CarPool(); CarPool carPoolB = new CarPool(); carPoolB.returnObject(carPoolA.borrowObject()); 我原以为池会管理它的内容,并

我正在使用Jakarta commons-pool-1.5.6.jar。我有两个相同类型对象的不同池(例如:汽车)。这是防止对象返回池的一种方法吗

以下是一个示例:

//CarPool extends BaseObjectPool
CarPool carPoolA =  new CarPool(); 
CarPool carPoolB =  new CarPool();
carPoolB.returnObject(carPoolA.borrowObject());
我原以为池会管理它的内容,并阻止向它返回外部对象


有什么想法吗?我必须自己管理吗?

我认为默认实现没有任何功能可以实现您所描述的(通过查看它们的API)。但您可以配置GenericObjectPool以实现您的目标,也可以将逻辑写入拼车。所以我想最终我对你的问题的答案是肯定的,你必须自己处理

以上答案对于1.x池是正确的。这些池不维护签出对象的内部引用,因此它们无法在返回时测试成员身份,也无法防止同一对象的多次返回


版本2.x池检查以确保返回的对象是从其返回的池借用的。返回未从池借用的对象或返回已返回的对象将导致2.x池中出现IllegalStateException。

所有池对象都应包含对其自己池的私有引用,并在池创建时加载。这使得将对象释放回池无参数:“myCar.release();”然后自动将对象返回到正确的池中,从而防止对象释放到错误的池中,并减少必须传递的池引用数。从封装此行为的“pooledObject”类中删除所有汽车、卡车、经销商、车库等。最终,这就是我所做的。我已经包好了游泳池,现在控制进出。记住从我的池中借用的对象,并验证它们在返回时确实来自此池。