我CommonsPoolTargetSource
为 bean 定义了一个 Spring。我试图了解池的工作原理,以及何时将对象返回到池中。
具体来说,如果我有一个工作人员,它接受一个池化对象并在其上调用两个方法,如下所示:
public class MyWorker {
@Resource
Foo pooledFoo;
void doWork()
{
pooledFoo.doStepA();
pooledFoo.doStepB();
}
}
从我在运行的测试中可以看到,pooledFoo
它实际上不是 的实例Foo
,而是 Pool 提供的代理。上面的流程是:
- 调用 doStepA()
foo
从池中检索一个值(如果线程不可用,则阻塞线程), - doStepA 在 pooledFoo 上执行
- 当 doStepA 完成时,
pooledFoo
实例返回到池中 - 控制返回到
doWork
方法,方法继续
如果这是正确的(如果不是,请告诉我),假设在调用pooledFoo
时从池中返回的值与返回的实例不同是否公平?doStepB()
doStepA()