Apache Commons pool 简介和pool连接池代码

在实际中工作,我们经常遇到需要连接池的地方,特别是数据库连接池。

我们为什么需要池呢?因为这些资源的创建,都很消耗资源。因此,我们使用一个对象池,里面预先创建了一些资源对象。当我们需要时,从池中取出对象,而不需要时,把对象返回池中。这样就可以提高代码运行的效率。

Apache Commons Pool(http://commons.apache.org/pool/)为我们提供了很方便的接口来实现对象池。我们唯一需要实现的就是如何产生对象,而不用去考虑一堆多线程问题。

2013年,Apache Commons Pool 2.0 发布,这是一个完全重写的对象池的实现,显著的提升了性能和可伸缩性,特别是在高并发加载的情况下。2.0 版本包含可靠的实例跟踪和池监控,要求 JDK 1.6 或者更新版本。这个版本完全不兼容1.x版本;

Apache Commons Pool从个人的角度来说,有三个关键点

1.Factory

回调。用于对象创建,销毁,验证,防止堵塞等。

2.Pool的配置

池的参数。比如最大多少个,最小多少个,最长堵塞时间等。

3.Pool实例

实际干活的。

ApacheCommons Pool 1.x示例代码:

packagetest.ffm83.commons.pool;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importorg.apache.commons.pool.BasePoolableObjectFactory;

importorg.apache.commons.pool.impl.GenericObjectPool;

/**

*commons pool的简单实用,基于1.x版本

* 1.Factory   TestPoolableObjectFactory

* 2.Pool的配置   就是pool

* 3.Pool实例  Resource

* @author范芳铭

*/

public
class
PoolBaseUsage {

public
static void
main(String[] args) {

final
GenericObjectPool pool = new GenericObjectPool(

                   new TestPoolableObjectFactory());

pool.setMaxActive(2);

for (int i = 0; i < 6; i++) {

new Thread(new Runnable() {

@Override

public
void
run() {

try {

Objectobj = pool.borrowObject();//
获取

System.out.println(obj);

Thread.sleep(5000);

pool.returnObject(obj);//归还了

}catch (Exception e){

e.printStackTrace();

}

}

}).start();

}

}

static
class
TestPoolableObjectFactory extends
BasePoolableObjectFactory{

public Object makeObject()
throws Exception {

return
new
Resource();

}

}

static
class
Resource {

public
static int
id;

private
int
rid;

public Resource() {

synchronized (this) {

rid = id++;

}

}

public
int
getRid() {

return
rid;

}

@Override

public String toString() {

SimpleDateFormatdf = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

Stringstr = df.format(newDate()) +
","+ "id:" +
rid;

return str;

}

}

}

结果一些说明,在这里设置了最大线程数为2,启用6个线程去运行:

运行结果:

2014-12-19 14:41:43,id:1

2014-12-19 14:41:43,id:0

2014-12-19 14:41:48,id:0

2014-12-19 14:41:48,id:1

2014-12-19 14:41:53,id:1

2014-12-19 14:41:53,id:0

仔细看这个运行结果,能看到明显分成了3波在运行。

如果我们调整下最大线程数,那么结果应该有明显变化。

将最大线程数调整为 pool.setMaxActive(4);

运行结果如下:

2014-12-19 15:08:39,id:3

2014-12-19 15:08:39,id:1

2014-12-19 15:08:39,id:2

2014-12-19 15:08:39,id:0

2014-12-19 15:08:44,id:3

2014-12-19 15:08:44,id:1

能够明显看到4个线程一起执行,另外两个后续执行;

时间: 2024-10-21 21:59:33

Apache Commons pool 简介和pool连接池代码的相关文章

Apache Commons Pool2连接池代码

2013年,Apache Commons Pool 2.0 发布,这是一个完全重写的对象池的实现.实现的代码和原来差异很大,原来的一些例子就不能用了.按照上面的例子,用pool2的类和方法重写下. ApacheCommons Pool 2.0 代码如下: package test.ffm83.commons.pool; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.

Apache Commons logging简介和使用

本章节内容主要来自网络和整理. Apache Commons Logging,又叫做JakartaCommons Logging (JCL),他提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具.它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具.用户被假定已熟悉某种日志实现工具的更高级别的细节.JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK等,进行了

Apache Commons IO简介

虽然Google的guava对Java的IO操作进行了一定封装,但是它更偏向于集合.并发和缓存,在实际项目中,我非常喜欢guava,同时我也非常喜欢Apache的一个工具包org.apache.commons.io,这两个工具包提供非常强大的工具能力,能够简化代码逻辑,提高开发效率和质量,是每个Java程序员都应该掌握的工具包.此文简单介绍一下org.apache.commons.io,详细的可参考其API注,此文绝大部分内容翻译自http://www.javacodegeeks.com/201

Apache Commons CLI 简介

CLI 命令代码实现 命令行程序处理流程相对比较简单,主要流程为设定命令行参数 -> 解析输入参数 -> 使用输入的数据进行逻辑处理CLI 定义阶段 每一条命令行都必须定义一组参数,它们被用来定义应用程序的接口.Apache Commons CLI 使用 Options 这个类来定义和设置参数,它是所有 Option 实例的容器.在 CLI 中,目前有两种方式来创建 Options,一种是通过构造函数,这是最普通也是最为大家所熟知的一种方式:另外一种方法是通过 Options 中定义的工厂方式

Apache commons Proxy简介和动态代理、动态拦截器实现

Apache Commons Proxy 是Apache 的一个之项目,封装了 Java 对象代理的一些常用方法.又叫做 动态代理. 动态代理的作用非常大,在很多底层框架中都会用得到,比如struts,Spring等都用到了动态代理,它的原理很简单,就是将你要使用的类,重新生成一个子类或本类,这样框架就可以利用这个新生成的类做一些事情,比如在该类的方法前后加一些代码. 设想一下,不用修改任何已经编写好的代码,只要使用动态代理就可以灵活的加入一些东西,将来要是不喜欢了,不用也不会影响原来的代码.

Apache commons beanutils简介和使用

在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的.但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来简化解决这个问题. 目前最新的版本是1.9. 在日常的开发中,下面类似的代码应该是非常的眼熟. DynaActionForm daf =(DynaActionForm)form ;

Apache commons chain简介和简单实现

apache commons chain 提供了对CoR模式的基础支持..CoR模式,是Chain of Responsebility的缩写.CommonsChain实现了Chain of Responsebility和Command模式,其中的Catalog + 配置文件的方式使得调用方和Command的实现方的耦合度大大的降低,提高了灵活性. 使用Apachecommons chain,需要将commons-chain.jar放入你的classpath,目前最新的版本是1.2. 从使用的角度

Apache commons exec 简介和简单ping命令方法调用实现

Apache commonsexec提供一些常用的方法用来执行外部进程.Apache commons exec库提供了监视狗Watchdog来设监视进程的执行超时,同时也还实现了同步和异步功能. Apache commonsexec涉及到多线程,比如新启动一个进程,Java中需要再开三个线程来处理进程的三个数据流,分别是标准输入,标准输出和错误输出. 需要使用该功能需要引入commons-exec-1.3.jar包,目前最新的版本为1.3版本. 在日常工作和生活中,我们经常需要用到网络,网络有时

Apache commons VFS简介和ShowProperties源代码示例

Apache commons VFS又叫做 Apache Commons Virtual FileSystem.是一组功能强大的对各类资源的访问接口,目前这个JAR包得到了全新的重构,目前最新的版本是2.2. 如果我们在平常的工作中,需要得到一些不同格式文件的信息,比如文件大小.所在路径.文件最后更改时间等,或者我们需要对文件进行一些常规的操作,比如删除文件,拷贝文件等等,那么Apache Commons中的VFS(Virtual File System)就是我们可以考虑的一个开源系统. 据VF