java池技术_Java对象池技术的原理及其实现

2)参数对象(ParameterObject)类

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

3)对象池(ObjectPool)类

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

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

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

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

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

通用对象池的实现

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

. . .

publicObjectPool createPool(ParameterObject paraObj,Class clsType) {

returnnewObjectPool(paraObj, clsType);

}

. . .

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

publicclassObjectPool {

privateParameterObject paraObj;//该对象池的属性参数对象

privateClass clsType;//该对象池中所存放对象的类型

privateintcurrentNum =0;//该对象池当前已创建的对象数目

privateObject currentObj;//该对象池当前可以借出的对象

privateVector pool;//用于存放对象的池

publicObjectPool(ParameterObject paraObj, Class clsType) {

this.paraObj = paraObj;

this.clsType = clsType;

pool =newVector();

}

publicObject 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();

}

returncurrentObj;

}

publicvoidreturnObject(Object obj) {

// 确保对象具有正确的类型

if(obj.isInstance(clsType)) {

pool.addElement(obj);

synchronized(this) {

notifyAll();

}

}else{

thrownewIllegalArgumentException("该对象池不能存放指定的对象类型");

}

}

}

32/3<123>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值