改造上一篇的代码,实现了KeyedObjectPool.
对象池实现类:
package com.my.pool.pooledobject; import org.apache.commons.pool2.KeyedObjectPool; public class KeyedPooledStringBuffer { private KeyedObjectPool<String,StringBuffer> pool; public KeyedPooledStringBuffer(KeyedObjectPool<String,StringBuffer> pool) { this.pool = pool; } public boolean print(String key,String data) { boolean flag = false; if(pool!=null&&key!=null) { StringBuffer buf = null; try{ buf = pool.borrowObject(key); buf.append(data); System.out.println(buf.toString()); return true; }catch(Exception e) { e.printStackTrace(); }finally { try { if(buf != null) { pool.returnObject(key, buf); } } catch (Exception e) { e.printStackTrace(); } } } return flag; } }
工厂类:
package com.my.pool.pooledobject; import org.apache.commons.pool2.BaseKeyedPooledObjectFactory; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.impl.DefaultPooledObject; /** * 先创建,后打包 * */ public class KeyedPooledStringBufferFactory extends BaseKeyedPooledObjectFactory<String,StringBuffer>{ @Override public StringBuffer create(String key) throws Exception { StringBuffer buf = new StringBuffer(); //根据key的不同进行不同的操作 if("hello".equals(key)) { buf.append(key); buf.append("\t"); }else { //Do nothing. } return buf; } @Override public PooledObject<StringBuffer> wrap(StringBuffer obj) { return new DefaultPooledObject<StringBuffer>(obj); } @Override /** * 归还后调用的方法 */ public void passivateObject(String key,PooledObject<StringBuffer> pooledObject) { StringBuffer buf = pooledObject.getObject(); buf.setLength(0); if("hello".equals(key)) { buf.append(key); buf.append("\t"); }else { //Do nothing. } } }
主类:
package com.my.pool.main; import org.apache.commons.pool2.impl.GenericKeyedObjectPool; import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig; import com.my.pool.pooledobject.KeyedPooledStringBuffer; import com.my.pool.pooledobject.KeyedPooledStringBufferFactory; public class KeyedMainClass { public static void main(String[] args) { GenericKeyedObjectPoolConfig config = new GenericKeyedObjectPoolConfig(); //最长等待分配时间 config.setMaxWaitMillis(1000l); //每种key池内最多对象数 config.setMaxTotalPerKey(100); //每种key池内最大空闲数目 config.setMaxIdlePerKey(20); //每种key池内最小空闲数目 config.setMinIdlePerKey(10); GenericKeyedObjectPool<String,StringBuffer> pool = new GenericKeyedObjectPool<String,StringBuffer>(new KeyedPooledStringBufferFactory()); KeyedPooledStringBuffer bufUtil = new KeyedPooledStringBuffer(pool); bufUtil.print("hello","OK"); bufUtil.print("else","OK"); } }
KeyedObjectPool和ObjectPool的区别在于对于输入的key可以做不一样的操作,甚至获得不同的线程池。本例是在创建的时候,加入了一些字符,并在回收之后把前缀又写回去。不同的用法,可以自己发挥想象。
相关推荐
Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池化的实现,以便高效地管理和复用有限的资源。标题中的"commo-pool, commons-pool commons-pool commons-pool"可能是由于输入错误,正确的应该是...
Apache Commons DBCP(Database Connection Pool)和Apache Commons Pool是两个在Java开发中广泛使用的开源库,主要用于数据库连接管理和对象池服务。这两个JAR文件,`commons-dbcp-1.4.jar` 和 `commons-pool-1.5.6...
Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池实现,以便在多个请求之间复用对象,从而提高性能和减少资源消耗。标题中的"commons-pool-1.6.jar.zip"表明这是一个包含Apache Commons Pool 1.6...
4. **通用对象池API**:Apache Commons Pool提供了一套通用的API,包括`GenericObjectPool`,用于管理和维护各种类型对象的池。 **Apache Commons Collections**: Apache Commons Collections是另一个Apache项目,...
Apache Commons Pool2是一个Java对象池库,用于管理可重用对象。对象池是软件设计中的一个概念,它允许程序在需要时重复使用已创建的对象,而不是每次需要时都创建新的对象。这在处理资源密集型对象(如数据库连接或...
Apache Commons Pool 是一个通用的对象池服务,它是DBCP的基础,负责对象的创建、维护和复用。Pool 1.6 提供了基本的池化服务,可以为任何可池化的对象(如数据库连接)创建池。其核心功能包括: 1. 对象池的创建和...
Apache Commons Pool 2是一个通用的对象池服务,它是Apache Commons组件的一部分。在Jedis中,它被用来实现对象池化,特别是Redis连接的池化。连接池允许应用程序重复使用已经创建的Redis连接,而不是每次需要时都...
3. `commons-pool-1.6.jar`:Apache Commons Pool是通用的对象池服务,它是DBCP连接池依赖的基础。DBCP利用了Pool库来实现对象(这里是数据库连接)的池化管理,包括创建、分配、回收和销毁连接等操作。 使用DBCP...
Jedis是Java编程语言中广泛使用的Redis客户端,而Apache Commons Pool2则是一个对象池实现,用于有效地管理资源,如数据库连接或在本例中,Jedis实例。 **Jedis 3.2.0** 是一个重要的Redis客户端,提供了与Redis...
`commons-pool2-2.4.2.jar`是Apache Commons Pool 2的实现,这是一个对象池设计模式的库。对象池是用于管理资源,如数据库连接或线程,以提高性能和效率的机制。在Java中,当频繁创建和销毁对象时,这可能导致大量的...
Apache Commons Pool是对象池设计模式的实现,它提供了一种在多个应用之间共享昂贵资源的机制,比如数据库连接。对象池允许开发者创建一个对象池,而不是每次需要时都创建新对象,从而节省了内存和提高了性能。在...
`commons-pool2-2.4.2.jar`是该库的二进制发行版,包含Pool2的所有类和方法,可以被项目依赖以实现对象池功能。版本号`2.4.2`表示这是该库的第2次大版本更新,第4次次要版本更新,第二次补丁版本更新,通常意味着...
在与Jedis结合使用时,我们可以配置一个JedisPool实例,设置合适的池参数,比如最大连接数、最小空闲连接数等,以满足应用的并发需求。 在实际应用中,为了使用这两个库,首先需要将它们添加到项目依赖中。对于...
Jedis是Java的一个开源客户端,专门用于操作Redis,而Commons Pool则是一个通用的对象池服务,为其他库(如Jedis)提供对象复用的能力,以提高性能和资源管理。 **Jedis详解:** Jedis是Redis官方推荐的Java客户端...
Apache Commons Pool 是一个Java对象池库,主要用于管理可重用对象。标题中的"commons-pool-1.5.6"指的是这个库的1.5.6版本。在Java开发中,对象池是一种优化资源管理的技术,它允许程序预先创建一组对象,当需要...
`commons-pool.jar`是Apache Commons Pool项目的一部分,它提供了一个通用的对象池服务。对象池设计用于管理和重用昂贵资源,如数据库连接或网络套接字。在Jedis中,Apache Commons Pool被用来管理Redis连接,通过...
`commons-pool-1.3.jar` 是Apache Commons项目中的对象池库,它为各种可池化对象提供了一种通用的框架。在DBCP中,它被用来管理数据库连接,确保多个线程可以共享有限的数据库连接资源,从而提高应用程序的效率。 ...
首先,Apache Commons Pool 是一个通用的对象池实现,它提供了一个框架,用于管理和复用对象,以提高性能和减少资源消耗。对象池的概念是创建一组预先初始化的对象,当需要时可以从池中获取,而不是每次需要时都创建...
Apache Commons Pool 提供了两种主要的对象池实现:GenericObjectPool 和 GenericKeyedObjectPool。它们都是基于策略的池化框架,允许用户自定义池的行为,例如最大池大小、空闲超时、测试对象是否有效等。这些策略...
Apache Commons Pool 是Apache软件基金会下的一个子项目,它主要关注于对象池的设计和实现。对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁地创建和销毁对象带来的性能开销。在Java...