场景介绍
需要复用,但是创建开销比较大的对象
支持处理对象的有效性验证
概念
pooledObject:池对象
pooledObjectFactory:池对象工厂
objectPool:池
xxxConfig:各种配置
pooledObject
注意状态变换以及状态机
objectPool
idle和active概念
运行机制
borrowObject
用于借出对象
形式:
阻塞形式
非阻塞形式
returnObject
用于归还对象
验证机制
lazy验证
即testOnReturn,testOnBorrow等
non-lazy验证
abandon
处理allocated状态,超过一定时间没有用的pooledObj
特定条件触发
evict
处理idle状态
1.局部,pooledObj.evictTest
2.全局,根据evictConfig,evictPolicy进行的evict
定时触发
目前涉及的应用
jedis,会在之后的jedis源码阅读中介绍
dbcp
思考
code冗余,javadoc不清晰
难以接入,最方便就是继承默认的
流程太复杂,耦合性有点高,配置复杂
比如说evict这个东西出现在poolObject和objectPool里面
比如pooledObject要知道需不需要AbandonLog