`

commons-pool对象池实例(一)

    博客分类:
  • java
 
阅读更多

使用commons-pool 框架实现了一个对象池例子。将官网的例子稍微改动了一下而已。

使用的版本是:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
	<version>2.4.2</version>
</dependency>

 

 

对象池实现类:

 

package com.my.pool.pooledobject;

import org.apache.commons.pool2.ObjectPool;

public class PooledStringBuffer {
	private ObjectPool<StringBuffer> pool;
	
	public PooledStringBuffer(ObjectPool<StringBuffer> pool) {
		this.pool = pool;
	}
	
	public boolean print(String data) {
		boolean flag = false;
		if(pool!=null) {
			StringBuffer buf = null;
			try{
				buf = pool.borrowObject();
				buf.append(data);
				System.out.println(buf.toString());
				return true;
			}catch(Exception e) {
				e.printStackTrace();
			}finally {
				try {
					pool.returnObject(buf);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
		return flag;
	}
	
}

 

对象池的工厂:

package com.my.pool.pooledobject;

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

/**
 * 先创建,后打包
 *
 */
public class PooledStringBufferFactory extends BasePooledObjectFactory<StringBuffer>{

	@Override
	public StringBuffer create() throws Exception {
		return new StringBuffer();
	}

	@Override
	/**
	 * 打包成一个可以调度的对象
	 */
	public PooledObject<StringBuffer> wrap(StringBuffer obj) {
		return new DefaultPooledObject<StringBuffer>(obj);
	}
	
	@Override
	/**
	 * 归还后调用的方法
	 */
	public void passivateObject(PooledObject<StringBuffer> pooledObject) {
		pooledObject.getObject().setLength(0);
	}

}

 

主类:

package com.my.pool.main;

import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import com.my.pool.pooledobject.PooledStringBuffer;
import com.my.pool.pooledobject.PooledStringBufferFactory;

public class MainClass {
	public static void main(String[] args) {
		GenericObjectPoolConfig config = new GenericObjectPoolConfig();
		//最长等待分配时间
		config.setMaxWaitMillis(1000l);
		//池内最多对象数
		config.setMaxTotal(100);
		//池内最大空闲数目
		config.setMaxIdle(20);
		//池内最小空闲数目
		config.setMinIdle(10);
		
		GenericObjectPool<StringBuffer> pool = new GenericObjectPool<StringBuffer>(new PooledStringBufferFactory(), config);
		
		PooledStringBuffer bufUtil = new PooledStringBuffer(pool);
		bufUtil.print("OK");
	}
}

 

    对象池可以应用于数据库连接池的管理,可以重复利用对象,提高性能。实际应用中使用spring进行配置管理会更方便

 

 

分享到:
评论

相关推荐

    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 Pool则是Apache Commons项目下的另一个组件,专注于对象池的实现。`commons-pool-1.5.6.jar` 提供了一套通用的对象池服务,DBCP利用它来管理数据库连接对象。对象池技术可以有效地复用对象,减少创建...

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

    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-pool2-2.4.2.jar

    Apache Commons Pool2是一个Java对象池库,用于管理资源的复用,特别是数据库连接池。在IT行业中,数据源管理是优化系统性能的关键部分,而Apache Commons Pool2则是实现这一目标的重要工具。本篇将深入探讨这个库的...

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

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

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

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

    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.jar+commons-pool2-2.4.3.jar

    在与Jedis结合使用时,我们可以配置一个JedisPool实例,设置合适的池参数,比如最大连接数、最小空闲连接数等,以满足应用的并发需求。 在实际应用中,为了使用这两个库,首先需要将它们添加到项目依赖中。对于...

    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-pool.jar,jedis-2.4.2.jar

    `commons-pool.jar`是Apache Commons Pool项目的一部分,它提供了一个通用的对象池服务。对象池设计用于管理和重用昂贵资源,如数据库连接或网络套接字。在Jedis中,Apache Commons Pool被用来管理Redis连接,通过...

    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。它们都是基于策略的池化框架,允许用户自定义池的行为,例如最大池大小、空闲超时、测试对象是否有效等。这些策略...

    commons-pool2-2.3-bin.zip

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

Global site tag (gtag.js) - Google Analytics