三分钟让你学会如何使用 apache-common-pool2 创建自己的资源池

(一)common-pools2的基本使用 这里为了理解关键使用步骤做个最简化的common-pools2 要实现commons-pool2框架,组要有三部分组成 1 ,ObjectPool:简单说这就是池,传说中的对象池,实现对象存取和状态管理的:如线程池,数据库连接池都可以用这个 2,PooledObject:这个是池化对象,简单说就是你想囤积的对象,专业术语叫池化对象。这个最后要放到ObjectPool对象里面去。同时也添加了一些附加... 阅读详情

需要 commons-pool2-2.3.jar 包,大家可以去官网下载

1:定义资源对象,即保存在资源池中的资源

public class User {
    //姓名
    private String name;
    //年龄
    private int age;
    //身高
    private String height;

    public User(String name, int age, String height) {
        super();
        this.name = name;
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        StringBuilder str = new StringBuilder(super.toString());
        str.append(" ");
        str.append("name:" + name);
        str.append(",age:" + age);
        str.append(",height:" + height);
        return str.toString();
    }

}

2:创建一个poolfactory 实现接口 org.apache.commons.pool2.PooledObjectFactory

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;

public class LpPoolFactory implements PooledObjectFactory {

/**
 * 功能描述:激活资源对象
 * 
 * 什么时候会调用此方法
 * 1:从资源池中获取资源的时候
 * 2:资源回收线程,回收资源的时候,根据配置的 testWhileIdle 参数,判断 是否执行 factory.activateObject()方法,true 执行,false 不执行
 * @param arg0 
 */
@Override
public void activateObject(PooledObject<User> arg0) throws Exception {
    System.out.println("activate Object");
}

@Override
public void destroyObject(PooledObject<User> arg0) throws Exception {
    System.out.println("destroy Object");
    User user = arg0.getObject();
    user = null;
}

@Override
public PooledObject<User> makeObject() throws Exception {
    System.out.println("make Object");
    User user = new User(Thread.currentThread().getName(), 26, "178cm");
    return new DefaultPooledObject<User>(user);
}

/**
 * 功能描述:钝化资源对象
 * 
 * 什么时候会调用此方法
 * 1:将资源返还给资源池时,调用此方法。
 */
@Override
public void passivateObject(PooledObject<User> arg0) throws Exception {
    System.out.println("passivate Object");
}

/**
 * 功能描述:判断资源对象是否有效,有效返回 true,无效返回 false
 * 
 * 什么时候会调用此方法
 * 1:从资源池中获取资源的时候,参数 testOnBorrow 或者 testOnCreate 中有一个 配置 为 true 时,则调用  factory.validateObject() 方法
 * 2:将资源返还给资源池的时候,参数 testOnReturn,配置为 true 时,调用此方法
 * 3:资源回收线程,回收资源的时候,参数 testWhileIdle,配置为 true 时,调用此方法
 */
@Override
public boolean validateObject(PooledObject<User> arg0) {
    System.out.println("validate Object");
    return true;
}

}

3:对一个资源池来说,应该有一些参数配置,apache-common-pool2的参数配置都在 org.apache.commons.pool2.impl.GenericObjectPoolConfig 中

点击查看

4:创建池,并从池中获取资源对象,使用完后,将资源对象返还给资源池

使用池的第一种方式
//使用默认的 config配置
LpPoolFactory factory = new LpPoolFactory();
GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory);

使用池的第二种方式
//使用 自己的  config配置
LpPoolFactory factory = new LpPoolFactory();
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMinIdle(2);
GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory,poolConfig);

测试代码 以及 测试结果

public static void main(String[] args) throws Exception{
    //工厂
    LpPoolFactory factory = new LpPoolFactory();
    //资源池配置
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    poolConfig.setMinIdle(2);
    //创建资源池
    GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory,poolConfig);   

    for(int i=0; i<3; i++) {
        Thread.sleep(1000);
        //获取资源对象
        User user = objectPool.borrowObject();
        //将获取的资源对象,返还给资源池
        objectPool.returnObject(user);
        //输出资源对象
        System.out.println(user);
        System.out.println();
    }

}

测试结果
make Object
activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

通过测试结果,可以看出 每次获取的都是一个对象。

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置 本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。 阅读详情

相关推荐

立创EDA开源项目:小北极冰冰杯(夏)——基于ESP32-C3的智能半导体制冷杯硬件设计与功能解析

本文详细解析了基于ESP32-C3的智能半导体制冷杯——小北极冰冰杯的硬件设计与核心功能。项目利用半导体制冷片实现快速降温,并集成了PWM智能调速散热、四路温度监控、杯具检测及PD/DC双电源输入等实用功能。文章深入剖析了其硬件架构、控制逻辑及实战注意事项,为嵌入式开发与智能硬件爱好者提供了宝贵的参考。

weixin_33245447的博客 271

java连接池详解与自定义es连接池

目录1 版本选择2 导入依赖3 使用commons-pool构造连接池3.1 pom.xml3.2 对象池类GenericObjectPool普通对象池GenericKeyedObjectPool带Key的对象池3.3 实现PoolableObjectFactory接口类3.4 继承BasePooledObjectFactory抽象类3.5 GenericObjectPool.Config()参数配置类3.6 elasticsearch连接池代码实现4 使用commons-pool2构造连接池4.1 pom

进击的豌豆的博客 4155

轻量级替代方案:用AIFlowy + Ollama在本地快速搭建一个可用的AI智能体平台

本文介绍了如何使用AIFlowy和Ollama在本地快速搭建轻量级AI智能体平台,涵盖从环境准备到智能体集成的全流程。通过简化部署步骤和优化性能,15分钟内即可完成搭建,适用于原型验证和小团队协作,显著提升开发效率。

weixin_29207533的博客 222

apache-common-pool2简单使用和源码分析

至此apache-common-pool2的部分关键代码分析完毕,对连接池有了更多的理解,个人使用案例参考之前做过另一篇笔记。

weixin_43316101的博客 1934

arcgis根据矢量范围统计栅格数据众数、最大值、均值、中位数、最小值、少数等

像元统计数据 根据多个栅格数据计算每个像元的统计数据。 可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。 https://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/an-overview-of-the-local-tools.htm ...

GIS哼哈哈的博客 6万+

PyMOL下载安装教程(附安装包)2025最新版(PyMOL 3.0.3)

本文详细介绍了Windows系统下PyMOL分子建模软件的安装教程。主要内容包括:提供安装包下载链接,强调需关闭杀毒软件;分步骤讲解管理员身份运行安装程序、接受协议、选择安装路径等安装流程;重点说明如何配置隐藏文件夹ProgramData中的许可证文件;最后提供基础使用技巧和常见问题解决方案。该教程适用于需要制作高质量分子结构图的科研人员和新手用户,帮助完成软件部署并顺利开展工作。

progalchemist的博客 3821

common-pool2

文章目录1、简介2、核心接口3、对象池逻辑分析3.1、对象池接口说明3.2、 对象创建解耦3.2、池对象的状态3.3、对象池相关配置项3.4、对象池源码分析4、对象池`browObject`的逻辑5、对象池`returnObject`的过程执行逻辑6、对象池的自我保护机制7、工厂的`passivateObject(PooledObject p)`和`passivateObject(PooledObject p)`即对象的激活和钝化方法有有什么作用?8、使用步骤9、注意事项 1、简介 对象池就是一种存放对象的

weixin_44457533的博客 1618

STM32实战篇:使用USART发送/接收数据

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);

qq_74114817的博客 596

Apache-Common-Pool2中对象池的使用方式

Apache Common-Pool2 组件最重要的功能,就是向开发人员提供一个稳定的、高性能的对象池。我们在实际开发过程中最常用、最典型的对象池就是数据库连接池。对象池可以在数据库连接对象被调用前,预先生成和管理一批可以使用的对象,用空间换时间的方式提升应用程序对数据库的操作性能。

JAVA入门中 1912

Qt入门教程【Core篇】singal and slot信号与槽

Qt中信号与槽singal and slot

小鱼酱的博客 2451

精密加工零件自动报价智能体设计与实现

摘要 本文设计并实现了一个精密加工零件自动报价智能体系统。该系统通过计算机视觉和几何分析技术,自动读取3D图纸(STEP/STL格式),提取影响加工成本的几何特征,实现精准报价。系统采用模块化设计,包含3D模型解析、特征提取、成本计算和报价生成四个核心模块。关键技术包括:使用PythonOCC处理STEP文件,Trimesh处理STL网格;实现体积、表面积、包围盒等基础几何量计算;开发特征提取算法识别复杂曲面、深孔等加工难点;基于规则库进行可加工性评分和成本估算。相比传统人工报价方式,该系统能显著提高报价效

AI的内部世界的博客 112

apache common pool2原理与实战

简介 对象池顾名思义就是存放对象的池,与我们常听到的线程池、数据库连接池、http连接池等一样,都是典型的池化设计思想。 对象池的优点就是可以集中管理池中对象,减少频繁创建和销毁长期使用的对象,从而提升复用性,以节约资源的消耗,可以有效避免频繁为对象分配内存和释放堆中内存,进而减轻jvm垃圾收集器的负担,避免内存抖动。 Apache Common Pool2 是Apache提供的一个通用对象池技术实现,可以方便定制化自己需要的对象池,大名鼎鼎的 Redis 客户端 Jedis 内部连接池就是基于它来实现的。

weixin_43511928的博客 2014

YOLO26 FP16/INT8混合量化实战:精度无损+速度拉满,边缘设备部署最优解

这是混合量化的灵魂,告诉量化器:哪些层不准动,保留FP16。"""判断是否为量化敏感层 → 是则豁免为FP16返回 True=敏感层(FP16),False=可量化(INT8)"""# 1. 检测头回归分支# 2. 小通道1×1卷积# 3. SiLU 激活# 4. 残差ShortcutYOLO26想要在Jetson、RK3588、昇腾、嵌入式NPU上真正落地,FP16/INT8混合量化是唯一最优解。它的核心逻辑不是玄学,而是工程上的精准取舍能量化的层,全部INT8榨性能;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 747

apache common pool2 对象池使用和原理

}} }System . out . println("激活对象,借用时调用");System . out . println("销毁对象");System . out . println("创建对象");System . out . println("钝化对象,归还时调用");System . out . println("判断对象是否可用");} }

weixin_36001569的博客 1695

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深入理解Apache Commons Pool2池化技术

Apache Commons Pool2是Apache Commons下的一个开源项目,主要用于实现和管理对象池。对象池是一种常见的设计模式,通过复用来分摊昂贵对象的创建和销毁代价,从而优化资源利用和提高应用程序性能。Commons Pool2提供了一套用于实现对象池化的API,并内置了多种各具特色的对象池实现。其被广泛应用在各种数据库连接池、线程池以及请求分发池中。其实现提供了一些参数来控制对象池的行为,例如最大池化对象数、最大空闲时间、最小空闲数等,可以根据不同的应用场景进行灵活配置。

码到三十五 8242

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

对象池的设计

ObjectPool //从池中获取对象 T borrowObject() throws Exception, NoSuchElementException,IllegalStateException; //将对象放回池中 void returnObject(T obj) throws Exception; //废弃对象 void

xiaomin1991222的专栏 398

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

使用Apache Commons Pool2创建Java对象池

相比于其他实现对象池的技术,使用 Commons Pool2 实现对象池的优点是:它提供了完整的对象池管理功能,包括对象的创建、初始化、借用、归还、清理和销毁等操作,并且支持多线程环境下的并发访问和线程安全。此外,Commons Pool2 还具有灵活的配置选项,可以根据具体场景对对象池的性能和资源消耗进行优化。缺点是,使用 Commons Pool2 实现对象池需要引入额外的依赖,增加了项目的复杂性。

一群专业码农的笔记本 3061

spring 集成common-pool2

Common-pool2 The Apache Commons Pool open source software library provides an object-pooling API and a number of object pool implementations. Version 2 of Apache Commons Pool contains a completely re-written pooling implementation compared to the 1.x serie

keep_learn的专栏 1248

Apache Commons-pool2使用入门

2021SC@SDUSC 文章目录安装项目介绍Maven 依赖接口设计ObjectPoolPooledObjectPooledObjectFactory常用的实现类GenericObjectPool`borrowObject``returnObject`DefaultPooledObject使用介绍参考链接 安装 项目介绍 创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外的主机上读出一些数据)的时候,尤其是这样。在需要大量生

SongyangJi 3185

common-pool2的使用

我们在服务器开发的过程中,,比如数据库连接,网络IO,大数据对象等。在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可忽略的性能影响。一种办法就是,每次创建的对象并不实际销毁,而是缓存在对象池中,下次使用的时候,不用再重新创建,直接从对象池的缓存中取即可。为了避免重新造轮子,我们可以使用优秀的开源对象池化组件,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,强大对象连接池管理类。</</</</

weixin_57128596的博客 674

commons.pool2 对象池的使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34034670的博客 316

commons-pool2自定义对象池-快速开始

文章目录什么是commons-pool2常用APIGenericObjectPool类PooledObjectFactory分析jedis如何使用commons pool2thrift连接池的实现 什么是commons-pool2 利用commons-pool2自定义对象池 commons-pool2是Apache下一个开源的公共资源池。我们可以根据它来快速的建立一个自己的对象池。 链接池/对...

西京刀客 3134

池技术之common-pool2

是什么 apache commons-pool是apache基金会的一个开源对象池组件,我们常用的数据库连接池dpcp和redis的java客户端jedis都使用commons-pool来管理连接 优化对象的创建,和设计模式中的享元模式思路一样 类解析 Po...

chongcan0436的博客 772

Apache Commons Pool :介绍与使用

默认情况下,闲置对象不会自动过期,除非设置了逐出线程参数(如设置可以明确指定闲置对象的过期时间。通过调优minIdle和maxIdle可以更好地控制池中对象的生命周期。是一个高效的对象池管理库,广泛用于连接池、线程池等需要管理资源的场景。其配置包括最小闲置数 (minIdle)和逐出线程 (Evictor)参数。最小闲置数 (minIdle定义对象池中需要保持的最小空闲对象数。如果空闲对象少于该值,池会创建新的对象,直到满足minIdle。逐出线程 (Evictor周期性检查并清理空闲对象。

Thinking In Java 2834

springboot使用commons-pool2实现对象池

频繁的创建和销毁,会极大的降低系统的性能,而对象池会在初始化的时候会创建一定数量的对象,每次访问只需从对象池中获取对象,使用完毕后再放回对象池,并不是直接销毁,这样可以保证程序重复使用同一个对象而不需要每次访问都创建和销毁对象, 从而提高系统性能。pool2的组成PooledObject(池化对象) PooledObjectFactory(对象工厂) ObjectPool (对象池)需要池化的对象/*** 需要池化的对象*/TestObject 工厂。

刀林寻诗 1554
上一篇: spring多数据源的配置-以及原理
下一篇: spring 整合 redis,以及spring的RedisTemplate如何使用
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值