commons-pool 是一个简单易用却又强大的对象池工具包,redis的Java client第三方包jedis就是使用commons-pool 的池化技术对其连接进行池化和管理。
在学习commons-pool之前,笔者尝试思考,一个对象池化工具需要提供哪些功能:
1. 对象的创建,销毁,检测健康状态
2. 对象池的管理维护,包括借用,归还,销毁。
笔者选择的commons-pool 源码版本是2.3,不同版本源码有出入。
一、基本设计和相关对象:
commons-pool 自己定义了 LinkedBlockingDeque,在对象的维护上使用了ConcurrentHashMap,锁的处理上,大量使用ReentrantLock,在数字变量上使用Atomic类型。
主要三大对象:
PooledObject 池对象,包含原始对象和一些基本信息,比如创建时间,休闲时间等
PooledObjectFactory 生产对象的工厂,工厂也包含了对对象的一些基本操作,比如创建新对象,销毁等。
ObjectPool 对象池,对象池和池对象两者可能有点绕,池对象就是需要池化的对象,比如连接池来说,连接就是对象,也就是池对象,而连接池就是对象池。
上面三大对象的基础上,commons-pool 自身提供了一些基本默认的实现:
PooledObject 的对应子类或者子接口有 DefaultPooledObject 和 PooledSoftReference
PooledObjectFactory
的对应子类或者子接口有 BasePooledObjectFactory 和 BaseKeyedPooledObjectFactory,使用者可根据需求,自行继承实现Factory,下面将会以例子说明。
ObjectPool 的对应子类有 GenericObjectPool 和 GenericKeyedObjectPool,两者的不同之处在于:前者只有一维,后者有二维,后者需要根据key来获取对应的对象池,再从对象池获取需要的对象。
二、源码说明:
1. PooledObject 状态(图片来自他人博客):
2. PooledObjectFactory 对对象的操作方法(
图片来自他人博客):
3. ObjectPool 管理对象的操作方法(图片来自他人博客)

本文详细探讨了commons-pool对象池工具包的基本设计、相关对象及其功能,包括PooledObject、PooledObjectFactory和ObjectPool的实现与用途。通过分析对象池的状态、对象工厂的操作和对象池的管理方法,旨在为开发者提供对象池化技术的理解与应用指导。
632

被折叠的 条评论
为什么被折叠?



