`

commons-pool对象池实例(二)

    博客分类:
  • java
 
阅读更多

改造上一篇的代码,实现了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可以做不一样的操作,甚至获得不同的线程池。本例是在创建的时候,加入了一些字符,并在回收之后把前缀又写回去。不同的用法,可以自己发挥想象。

 

 

分享到:
评论

相关推荐

    commo-pool, commons-pool commons-pool commons-pool

    Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池化的实现,以便高效地管理和复用有限的资源。标题中的"commo-pool, commons-pool commons-pool commons-pool"可能是由于输入错误,正确的应该是...

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    Apache Commons DBCP(Database Connection Pool)和Apache Commons Pool是两个在Java开发中广泛使用的开源库,主要用于数据库连接管理和对象池服务。这两个JAR文件,`commons-dbcp-1.4.jar` 和 `commons-pool-1.5.6...

    commons-pool-1.6.jar.zip

    Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池实现,以便在多个请求之间复用对象,从而提高性能和减少资源消耗。标题中的"commons-pool-1.6.jar.zip"表明这是一个包含Apache Commons Pool 1.6...

    commons-pool-1.3.jar+commons-collections-3.2.1.jar

    4. **通用对象池API**:Apache Commons Pool提供了一套通用的API,包括`GenericObjectPool`,用于管理和维护各种类型对象的池。 **Apache Commons Collections**: Apache Commons Collections是另一个Apache项目,...

    commons-pool2-2.6.0-bin.zip

    Apache Commons Pool2是一个Java对象池库,用于管理可重用对象。对象池是软件设计中的一个概念,它允许程序在需要时重复使用已创建的对象,而不是每次需要时都创建新的对象。这在处理资源密集型对象(如数据库连接或...

    commons-dbcp-1.4和commons-pool-1.6驱动包下载(亲测可用)

    Apache Commons Pool 是一个通用的对象池服务,它是DBCP的基础,负责对象的创建、维护和复用。Pool 1.6 提供了基本的池化服务,可以为任何可池化的对象(如数据库连接)创建池。其核心功能包括: 1. 对象池的创建和...

    dbcp连接池所需jar(commons-collections-3.1.jar,commons-dbcp-1.2.jar,commons-pool-1.6.)

    3. `commons-pool-1.6.jar`:Apache Commons Pool是通用的对象池服务,它是DBCP连接池依赖的基础。DBCP利用了Pool库来实现对象(这里是数据库连接)的池化管理,包括创建、分配、回收和销毁连接等操作。 使用DBCP...

    commons-pool2-2.4.2和jedis-2.7.2

    `commons-pool2-2.4.2.jar`是Apache Commons Pool 2的实现,这是一个对象池设计模式的库。对象池是用于管理资源,如数据库连接或线程,以提高性能和效率的机制。在Java中,当频繁创建和销毁对象时,这可能导致大量的...

    commons-pool commons-dbcp

    Apache Commons Pool是对象池设计模式的实现,它提供了一种在多个应用之间共享昂贵资源的机制,比如数据库连接。对象池允许开发者创建一个对象池,而不是每次需要时都创建新对象,从而节省了内存和提高了性能。在...

    jedis-2.9.0+commons-pool2-2.4.2redis依赖包

    Apache Commons Pool 2是一个通用的对象池服务,它是Apache Commons组件的一部分。在Jedis中,它被用来实现对象池化,特别是Redis连接的池化。连接池允许应用程序重复使用已经创建的Redis连接,而不是每次需要时都...

    jedis-2.1.0.jar+commons-pool-1.6.jar

    Jedis是Java的一个开源客户端,专门用于操作Redis,而Commons Pool则是一个通用的对象池服务,为其他库(如Jedis)提供对象复用的能力,以提高性能和资源管理。 **Jedis详解:** Jedis是Redis官方推荐的Java客户端...

    commons-pool-1.5.6

    Apache Commons Pool 是一个Java对象池库,主要用于管理可重用对象。标题中的"commons-pool-1.5.6"指的是这个库的1.5.6版本。在Java开发中,对象池是一种优化资源管理的技术,它允许程序预先创建一组对象,当需要...

    commons-dbcp、commons-pool、msbase、mssqlserver、msutil

    `commons-pool-1.3.jar` 是Apache Commons项目中的对象池库,它为各种可池化对象提供了一种通用的框架。在DBCP中,它被用来管理数据库连接,确保多个线程可以共享有限的数据库连接资源,从而提高应用程序的效率。 ...

    commons-pool.jar commons-dbcp-1.2.jar

    首先,Apache Commons Pool 是一个通用的对象池实现,它提供了一个框架,用于管理和复用对象,以提高性能和减少资源消耗。对象池的概念是创建一组预先初始化的对象,当需要时可以从池中获取,而不是每次需要时都创建...

    commons-pool-1.4.jar

    Apache Commons Pool 提供了两种主要的对象池实现:GenericObjectPool 和 GenericKeyedObjectPool。它们都是基于策略的池化框架,允许用户自定义池的行为,例如最大池大小、空闲超时、测试对象是否有效等。这些策略...

    jedis-3.2.0.jar + commons-pool2-2.6.2.jar

    Jedis是Java编程语言中广泛使用的Redis客户端,而Apache Commons Pool2则是一个对象池实现,用于有效地管理资源,如数据库连接或在本例中,Jedis实例。 **Jedis 3.2.0** 是一个重要的Redis客户端,提供了与Redis...

    commons-pool-1.5.5.jar.zip

    Apache Commons Pool 是Apache软件基金会下的一个子项目,它主要关注于对象池的设计和实现。对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁地创建和销毁对象带来的性能开销。在Java...

    commons-pool2-2.3-bin.zip

    Apache Commons Pool 2.3 是一个Java对象池库,它提供了通用的对象池服务。对象池是一种设计模式,用于高效管理资源,尤其是那些创建和销毁成本较高的对象。通过复用已经创建的对象,对象池可以减少系统开销,提高...

    Jedis-2.9.0和commons-pool2-2.4.2架包

    1. **对象池设计**:Pool2提供了一个灵活的对象池接口,可以根据不同需求定制池化策略。 2. **线程安全**:池化对象的获取和释放是线程安全的,确保多线程环境下的稳定性。 3. **配置灵活性**:可以设置各种参数,如...

    commons-pool2-2.6.2.jar和jedis-2.9.0.jar.zip

    首先,`commons-pool2-2.6.2.jar` 是 Apache Commons Pool 的第二版,这是一个通用的对象池服务。对象池的概念是创建一组预先初始化的对象并重复使用它们,以减少频繁创建和销毁对象带来的性能开销。Apache Commons ...

Global site tag (gtag.js) - Google Analytics