解读commons-pools

本文详细探讨了commons-pool对象池工具包的基本设计、相关对象及其功能,包括PooledObject、PooledObjectFactory和ObjectPool的实现与用途。通过分析对象池的状态、对象工厂的操作和对象池的管理方法,旨在为开发者提供对象池化技术的理解与应用指导。
部署运行你感兴趣的模型镜像
      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 管理对象的操作方法(图片来自他人博客

    
       

    
    

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值