zoukankan      html  css  js  c++  java
  • 用对象池保存常用的对象

    由于创建对象需要消耗一定得资源,在程序中用对象池来保存常用的对象,可以节省创建对象的开支。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   }

        

  • 相关阅读:
    java实现亲密数
    java实现亲密数
    java实现亲密数
    java实现亲密数
    java实现坐标
    java实现坐标
    java实现坐标
    java实现坐标
    java实现坐标
    spring中注解注入 context:component-scan 的使用说明
  • 原文地址:https://www.cnblogs.com/mihu/p/3116949.html
Copyright © 2011-2022 走看看