zoukankan      html  css  js  c++  java
  • 创建资源池(对象池)

    程序中许多资源的使用是有限制的,比如数据库连接,线程等。如果要对这些资源的创建和分配进行有效管理,则需要建立资源池也即对象池。

             资源池的功能是提供对象和回收对象。和普通对象工厂不同的是,它还有以下职责:确保创建的资源数不能大于最大值(如果有最大值的话);确保空闲资源不能过多;在没有空闲资源的时候,做应该做的事,比如报错或者让线程等待。

             虽然它的实现并不复杂,但是作为java开发人员,我们也不需要自己实现了。因为apache的commons-pool-<版本号>.jar包里面的类已经帮我们实现了此功能。我们只要实现资源的工厂类就可以了。

             类介绍:

             ·StackObjectPool:不控制资源个数的资源池。

        ·GenericObjectPool:是一个比较常用的资源池,它会控制资源总数量,和空闲资源数量。

        ·SoftReferenceObjectPool:允许java垃圾回收器回收资源对象的资源池。

       

        使用举例:

        例如,有一种资源(MyObject)需要被对象池管理起来。那么我们只要创建一个工厂类MyObjectFactory就可以了。

        代码如下:

    1. import org.apache.commons.pool.BasePoolableObjectFactory;  
    2. public class MyObjectFactory extends BasePoolableObjectFactory {  
    3.     int count=0;  
    4.     @Override  
    5.     public Object makeObject() throws Exception {  
    6.         // TODO Auto-generated method stub  
    7.         MyObject o=new MyObject();  
    8.         o.name=(count++)+"";  
    9.         return o;  
    10.     }  
    11. }  

    得到资源池的代码如下:

    ObjectPool pool=new GenericObjectPool(new MyObjectFactory(),20)

    上面得到的资源池,最多可以提供20个资源对象。

    之后程序中就可以用“MyObject mo=(MyObject)pool.borrowObject() 来代替“new MyObject()”了。

     

    同时apachepool组件定义了标准的接口,很方便我们扩展。比如,需要这样一个对象池,它管理3种对象。比如“苹果对象”、“梨对象”、“桔子”,要求根据不同的参数得到不同的对象,但是3种对象的数量之和不超过50。jar包中没有现成的对象池类,但是只要我们实现了poo的标准接口,依然可以像GenericObjectPool一样方便的使用。 

  • 相关阅读:
    Struts框架之结果页面的跳转
    eclipse中运行tomcat提示端口被占的4种解决方案
    在Struts2框架中使用Servlet的API
    Struts2框架之Action类的访问
    判断有无网
    UITextField银行卡加空格
    关于UI_USER_INTERFACE_IDIOM() & UIDevice.model
    OC导航栏跳转指定界面
    oc UIAlertController封装
    升级到macSierra 10.12之后 在模拟器上面滑动视图很卡,
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959280.html
Copyright © 2011-2022 走看看