快速业务通道

Java对象池技术的原理及其实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
jectPoolFactory();  }  return poolFactory; }

2)参数对象(ParameterObject)类

该类主要用于封装所创建对象池的一些属性参数,如池中可存放对象的数目的最大值(maxCount)、最小值(minCount)等。

3)对象池(ObjectPool)类

用于管理要被池化对象的借出和归还,并通知PoolableObjectFactory完成相应的工作。它一般包含如下两个方法:

·getObject:用于从池中借出对象;

·returnObject:将池化对象返回到池中,并通知所有处于等待状态的线程;

4)池化对象工厂(PoolableObjectFactory)类

该类主要负责管理池化对象的生命周期,就简单来说,一般包括对象的创建及销毁。该类同ObjectPoolFactory一样,也可将其实现为单实例。

Java对象池技术的原理及其实现(2)

时间:2010-05-13 计算机与信息技术 汪永好

通用对象池的实现

对象池的构造和管理可以按照多种方式实现。最灵活的方式是将池化对象的Class类型在对象池之外指定,即在ObjectPoolFactory类创建对象池时,动态指定该对象池所池化对象的Class类型,其实现代码如下:

. . . public ObjectPool createPool(ParameterObject paraObj,Class clsType) {  return new ObjectPool(paraObj, clsType); } . . .

其中,paraObj参数用于指定对象池的特征属性,clsType参数则指定了该对象池所存放对象的类型。对象池(ObjectPool)创建以后,下面就是利用它来管理对象了,具体实现如下:

public class ObjectPool {  private ParameterObject paraObj;//该对象池的属性参数对象  private Class clsType;//该对象池中所存放对象的类型  private int currentNum = 0; //该对象池当前已创建的对象数目  private Object currentObj;//该对象池当前可以借出的对象  private Vector pool;//用于存放对象的池  public ObjectPool(ParameterObject paraObj, Class clsType) {   this.paraObj = paraObj;   this.clsType = clsType;   pool = new Vector();  }  public Object getObject() {   if (pool.size() <= paraObj.getMinCount()) {    if (currentNum <= paraObj.getMaxCount()) {     //如果当前池中无对象可用,而且已创建的对象数目小于所限制的最大值,就利用     //PoolObjectFactory创建一个新的对象     PoolableObjectFactory objFactory =PoolableObjectFactory.getInstance();     currentObj = objFactory.create Object (clsType);     currentNum++;    } else {     //如果当前池中无对象可用,而且所创建的对象数目已达到所限制的最大值,     //就只能等待其它线程返回对象到池中     synchronized (this) {      try {       wait();      } catch (InterruptedException e) {       System.out.println(e.getMessage());       e.printStackTrace();      }      currentObj = pool.firstElement();     }    }   } else {    //如果当前池中有可用的对象,就直接从池中取出对象    currentObj = pool.firstElement();   }   return currentObj; }   public void returnObject(Object obj) {    // 确保对象具有正确的类型    if (obj.isInstance(clsType)) {     pool.addElement(obj);     synchronized (this) {      notifyAll();     }    } else {     throw new IllegalArgumentException("该对象池不能存放指定的对象类型");    }   } }

从上述代码可以看出,ObjectPool利用一个java.util.Vector作为可扩展的对象池,并通过它的构造函数来指

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号