基于Apache commons-pool2的池化技术
【摘要】
使用的是Apache commons-pool2包
Common-pool2由三大模块组成:ObjectPool、PooledObject和PooledObjectFactory。 ObjectPool:提供所有对象的存取管理。 PooledObject:池化的对象,是对对象的一个包装,加上了对象的一些其他信息,包括对象的状...
使用的是Apache commons-pool2包
-
Common-pool2由三大模块组成:ObjectPool、PooledObject和PooledObjectFactory。
-
ObjectPool:提供所有对象的存取管理。
-
PooledObject:池化的对象,是对对象的一个包装,加上了对象的一些其他信息,包括对象的状态(已用、空闲),对象的创建时间等。
-
PooledObjectFactory:工厂类,负责池化对象的创建,对象的初始化,对象状态的销毁和对象状态的验证。
-
ObjectPool会持有PooledObjectFactory,将具体的对象的创建、初始化、销毁等任务交给它处理,其操作对象是PooledObject,即具体的Object的包装类。
-
org.apache.commons.pool2.impl 包提供了一个默认的对象池实现。
主要还是这三个模块的实现,其中PooledObjectFactory在包里没有具体实现,因为这涉及到具体对象的创建,需要应用本身去实现,这也体现了设计上的解耦合性。
-
BaseGenericObjectPool
它主要定义了对象池的一些配置信息和实现jmx注册注销等功能。
以下是对象池的相关配置
-
GenericObjectPool
数据结构:ConcurrentHashMap和LinkedBlockingDeque。前者用于存储所有的对象(不含销毁的对象),后者用于存储空闲的对象。
-
borrowObject()大体思路如下
1 从LinkedBlockingDeque中pollFirst
2 若为空,检查对象池对象是否达到上限,若是重复1,若否,则调用PooledObjectFactory的makeObject去创建一个对象
3 得到对象之后,对对象进行初始化和一些配置的计数处理,同时将对象加入到ConcurrentHashMap。
returnObject(T obj)大体思路如下
1 根据obj从ConcurrentHashMap拿到其对应的PooledObject p
2 判空;将p状态置为RETURN
3 若getTestOnReturn参数为true,进行validateObject
4 对p进行passivateObject,与初始化相反
5 更新p状态为IDLE
6 归还Pool:Pool的idle实例达到上限或者Pool已经关闭,销毁之,否则将p加入到LinkedBlockingDeque中。
DefaultPooledObject
默认的PooledObject实现,维护池化对象的一系列状态参数。
1.自定义工厂创建对象
其中DefaultPooledObject 是对我们定义的User类的包装里面包装了基础的用于维护的属性
比如某个对象创建的时间,空闲时间以及活跃时间等,类似于Cache对象,声明周期属性
2.wrap对象关系
ObjectPool类族 ObjectPool类族包含了以ObjectPool为代表的一系列pool,其中最主要的两类就是ObjectPool和KeyedObjectPool,他们分别针对普通的pool和以名值对映射的pool。
添加配置
文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。
原文链接:springlearn.blog.csdn.net/article/details/79296359
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)