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一样方便的使用。 

  • 相关阅读:
    近况说明
    【模板】Johnson 全源最短路
    富文本编辑器,webbrowser控件 document.execCommand() 解析
    Visual studio 2010 工具箱名称不显示的原因
    利用批处理bat实现 【QQ批量登陆】
    ESPCMS 使用上碰到的一些问题记录
    Java虚拟机的GC垃圾回收机制(garbage collection)
    垃圾回收机制及循环引用
    C++ 的强引用和弱引用
    (转载)Linux的file descriptor笔记
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959280.html
Copyright © 2011-2022 走看看