commons-pool2源码分析-ObjectPool接口

ObjectPool是一个简单的对象池定义接口。接口的应用也很简单:

Object obj = null;
try {
     obj = pool.borrowObject();
     try {
         //...use the object...
     } catch(Exception e) {
         // invalidate the object
         pool.invalidateObject(obj);
         // do not return the object to the pool twice
         obj = null;
     } finally {
         // make sure the object is returned to the pool
         if(null != obj) {
             pool.returnObject(obj);
        }
     }
 } catch(Exception e) {
       // failed to borrow an object
 }

 

函数定义

ObjectPool接口内定义了八个函数,最重要的是上面使用的借出、作废和归还这个三个函数。

借出对象borrowObject()方法:从对象池获取对象实例,借出的对象实例必须归还,因此借和还的方法必须成对出现。借出方法定义抛出三类异常:第一种异常是内部创建对象过程的中出现问题,抛出Exception异常;第二种异常是借出方法别调用之前,对象池已经被关闭,抛出IllegalStateException状态异常;第三种异常是对象池已经耗尽,没有对象可被借出的NoSuchElementException元素不存储异常。这三类异常都是JDK提供的异常类。

归还对象returnObject(T obj)方法:归还的对象obj必须是通过borrowObject()方法或相关方法借出的,否则方法会抛出IllegalStateException,如果归还的对象实例不是被借出状态(借出状态参考状态机),方法同样会抛出IllegalStateException异常。如果归还失败方法抛出Exception异常。

作废对象invalidateObject(T obj)方法:对象作废的决定权在客户端,借出的对象在使用过程中出现问题,客户端代码调用该方法将其归还并作废。这里的obj对象必须是通过borrowObject()方法借出的对象,作废失败方法会抛出Exception异常。

新增空闲对象addObject()方法:方法没有参数,是指对象池负责对象实例的创建,并将对象存放至空闲对象队列中。该方法的主要重要之一就是实现对象实例预加载,在对象使用之前,提交创建一些对象实例,预存在对象池中。对象实例创建错误,会抛出Exception异常。对象实例创建之前,如果对象池已经关闭,会抛出IllegalStateException异常。如果对象池的实现类不支持外部触发对象创建,方法应该抛出UnsupportedOperationException异常。

getNumIdle():返回对象池中空闲对象数量。

getNumActive():返回已被借出对象数量。

clear():清除空闲对象,释放资源。实现类不支持该方法需要抛出UnsupportedOperationException异常。清除过程出现异常抛出Excetpion异常。

close():关闭资源池,并且是否所有资源,一定对象池被关闭,借出方法和新增对象方法的调用会抛出非法状态异常。

思考扩展

1.一个资源池对象应该定义哪些方法?

在定义一个对象时,应该考虑清楚对象的职责。对象资源池ObjectPool定义了三类方法:对象管理类方法(borrowObject,returnObject,invalidateObject)、资源统计类方法(getNumIdle, getNumActive)、自身管理类方法(clear,close)。通过对象职责的细分定义不同类别的方法,可以更好的思考对象应该具备的职责。

2.对象数量方法的命名

getNumIdle()和getNumActive()两个方法的命名好像不太符合语法习惯,我们更多的定义方式为getIdelNum()和getActiveNum()。“getNumActive()”可以分解为get num of active,”of”可以省略掉。这样定有一个好处,就是在IDE提示方法的时候可以更好的排序,将同一类方法排列在一起,方便查询。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值