apache commons-pool 对象池学习笔记一 代码结构

[b]pool项目[/b]
到底什么是 pool, 简单来说, 就是先建立一些存在的 object, 放在 pool 之中, 当你有需要的时候,
可以从 pool 中直接获取, 不需要重新建立.. 最常听到的就是 database connection pooling,
因为建立数据库连结是一件耗时的工作, 如果我们先把连结建立好, 就可以节省这一些时间。database
connection pooling 即dbcp。


common-pool主要分为org.apache.commons.pool包 和 org.apache.commons.pool.imp包。

一、org.apache.commons.pool包提供对象池化API

org.apache.commons.pool包
接口
KeyedObjectPool<K,V> 带“键”的池化接口
KeyedObjectPoolFactory<K,V> 用于创建KeyedObjectPools的工厂
KeyedPoolableObjectFactory<K,V> 为 一个由KeyedObjectPool提供服务的实例 定义生命周期的相关方法
ObjectPool<T> 池化接口
ObjectPoolFactory<T> 用于创建ObjectPools的工厂
PoolableObjectFactory<T> 为 一个由ObjectPools提供服务的实例 定义生命周期的相关方法

BaseKeyedObjectPool<K,V> 为KeyedObjectPool提供简单实现
BaseKeyedPoolableObjectFactory<K,V> 为KeyedPoolableObjectFactory提供基本实现
BaseObjectPool<T> 为ObjectPool提供简单实现
BasePoolableObjectFactory<T> 为PoolableObjectFactory提供基本实现
PoolUtils 这个类仅仅由一些静态类组成,这些方法用来操作或返回ObjectPool(或KeyedObjectPool)相关的接口

二、org.apache.commons.pool.imp包提供对象池化API的实现

org.apache.commons.pool.imp包

GenericKeyedObjectPool<K,V> 可配置的KeyedObjectPool的实现
GenericKeyedObjectPool.Config 该静态内部类为GenericKeyedObjectPool提供封装配置信息。只需配置Config即可。
GenericKeyedObjectPoolFactory<K,V> 创建GenericKeyedObjectPool实例的工厂.
GenericObjectPool<T> 可配置的ObjectPool的实现
GenericObjectPool.Config 该静态内部类为GenericObjectPool提供封装配置信息。只需配置Config即可。
GenericObjectPoolFactory<T> 创建GenericObjectPool实例的工厂
SoftReferenceObjectPool<T> 基于ObjectPool的软引用.可以随需要进行增加,他的回收是由垃圾回收站进行的
StackKeyedObjectPool<K,V> 简单的基于堆的KeyedObjectPool实现
StackKeyedObjectPoolFactory<K,V> 创建StackKeyedObjectPool实例的工厂
StackObjectPool<T> 简单的基于堆的ObjectPool的实现
StackObjectPoolFactory<T> 创建StackObjectPool实例的工厂
好的,针对上述代码,我们可以使用commons-pool2提供的对象池进行修改。具体实现步骤如下: 1. 引入commons-pool2的依赖包,例如在Maven项目中,在pom.xml文件中添加以下代码: ``` <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.11.1</version> </dependency> ``` 2. 创建一个连接池对象,用于管理HttpClients对象的创建和回收: ```java GenericObjectPool<CloseableHttpClient> httpClientPool = new GenericObjectPool<>(new HttpClientFactory()); ``` 其中,HttpClientFactory是一个实现了PooledObjectFactory接口的类,用于创建和销毁HttpClients对象。具体实现可以参考下面的代码: ```java public class HttpClientFactory implements PooledObjectFactory<CloseableHttpClient> { @Override public PooledObject<CloseableHttpClient> makeObject() throws Exception { return new DefaultPooledObject<>(HttpClients.createDefault()); } @Override public void destroyObject(PooledObject<CloseableHttpClient> pooledObject) throws Exception { CloseableHttpClient httpClient = pooledObject.getObject(); httpClient.close(); } @Override public boolean validateObject(PooledObject<CloseableHttpClient> pooledObject) { CloseableHttpClient httpClient = pooledObject.getObject(); return httpClient != null && httpClient.getConnectionManager().isShutdown(); } @Override public void activateObject(PooledObject<CloseableHttpClient> pooledObject) throws Exception { // do nothing } @Override public void passivateObject(PooledObject<CloseableHttpClient> pooledObject) throws Exception { // do nothing } } ``` 3. 使用连接池对象获取HttpClients对象,例如: ```java CloseableHttpClient httpClient = httpClientPool.borrowObject(); ``` 4. 使用完HttpClients对象后,将其归还给连接池: ```java httpClientPool.returnObject(httpClient); ``` 通过上述步骤,我们就可以使用commons-pool2提供的对象池来管理HttpClients对象的创建和回收了。这样可以大大减少对象的创建和销毁次数,提高程序的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值