基于Apache commons-pool2的池化技术

使用的是Apache commons-pool2包

基于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实现,维护池化对象的一系列状态参数。

基于Apache commons-pool2的池化技术

1.自定义工厂创建对象

基于Apache commons-pool2的池化技术

基于Apache commons-pool2的池化技术

其中DefaultPooledObject 是对我们定义的User类的包装里面包装了基础的用于维护的属性

比如某个对象创建的时间,空闲时间以及活跃时间等,类似于Cache对象,声明周期属性

2.wrap对象关系

基于Apache commons-pool2的池化技术

ObjectPool类族 ObjectPool类族包含了以ObjectPool为代表的一系列pool,其中最主要的两类就是ObjectPool和KeyedObjectPool,他们分别针对普通的pool和以名值对映射的pool。

基于Apache commons-pool2的池化技术

添加配置

基于Apache commons-pool2的池化技术

猜你喜欢

转载自blog.csdn.net/message_lx/article/details/79296359