commons.pool对象池对象获取的方式

在我的印象中,对象池是有最小对象数,最大对象数的,即当容器中的对象数目达到最大数后,请求线程等待空闲对象,此时线程应该是wait,等待return空闲对象的时候notify通知该线程去获得对象。
观察apache.commons.pool的StackObjectPool源码的borrowObject()方法:

while (null == obj) {
//如果池不空,直接给你一个空闲对象。(注意:这里的对象池_pool放置的都是空闲对象)
if (!_pool.empty()) {
obj = _pool.pop();
} else {
if(null == _factory) {
throw new NoSuchElementException();
} else {
//注意这里new了一个对象出来。
[color=red][b]obj = _factory.makeObject();[/b][/color]
newlyCreated = true;
if (obj == null) {
throw new NoSuchElementException("PoolableObjectFactory.makeObject() returned null.");
}
}
}
................
}

上面可见,commons的pool没有作线程等待处理,而是池里面的空闲对象没有了就调用你自己的factory的makeObject方法,这个方法一般都是直接new一个对象出来,可见,commons的pool对对象的个数并没有限制住,当空闲对象不够用的时候,不是等待,而是直接创建对象。当然,可能commons认为wait会堵塞线程,但实际上,我们有些时候是需要控制对象的数量的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值