用对象池保存常用的对象

由于创建对象需要消耗一定得资源,在程序中用对象池来保存常用的对象,可以节省创建对象的开支。Apache commons-pool提供了GenericObjectPool,一个比较常用的资源池,它会控制资源总数量,和空闲资源数量。

使用方法:

  1.   继承基础对象池工厂类BasePoolableObjectFactory;
  2.   实现其抽象方法makeObject();
  3.   利用GenericObjectPool类得构造方法构造对象池得实例它得构造方法有很多种,具体可以查看commons-pool api 地址:http://commons.apache.org/proper/commons-pool/apidocs/index.html);
  4.       GenericObjectPool类常用得几个方法如下: borrowObject() : 从对象池中获得一个对象;addObject() : 创建一个新得实例,放入对象池中; returnObject() : 将获取到得对象还回对象池中;

 例:

  1. 实现一个自己需要得对象池工厂

 1       public class MyObjectPoolFactory extends BasePoolableObjectFactory{
 2 
 3       //这里实现类BasePoolableObjectFactory中得抽象方法makeObject,用来给自己得对象池工厂中构造所需得对象
 4 
 5       @Override
 6 
 7       public Object makeObject() throws Exception {  
 8 
 9         MyObject mo = new MyObject();
10 
11         mo.setId("1");
12 
13         mo.setName("test");
14 
15         return mo;
16 
17       }
18 
19      }

     2.获取对象池对象从里面获取对象

 1   GenericObjectPool pool = new GenericObjectPool(new MyObjectPoolFactory(), 20);
 2 
 3    for(int i=0; i<21; i++){
 4 
 5      MyObject mo = (MyObject)pool.borrowObject();    //此处从对象池中获取一个对象,可以使用该对象做自己所需得操作
 6 
 7      System.out.println(mo.hashCode());   //此处打印出获取到得对象得hashCode,由于每个对象得hashCode都是唯一得。但是这里打印出得hashCode值是一样得,因为后面将对象还了回去,所以每次取到得都是同一个对象。如果后面不执行returnObject操作,则此处打印出得hashCode是不同得。
 8 
 9      pool.returnObject(mo);  //此处将对象还回对象池
10 
11   }

    

原文地址:https://www.cnblogs.com/mihu/p/3116949.html