站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题基本对象池的使用

基本对象池的使用

摘要: 基本对象池的使用
<table cellSpacing=0 cellPadding=0 border=0 class="zh114" align="right"> <tr> <td > </td> </tr> </table>
  /**
  *

Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用


  *

Description:
  * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.


  *

基本对象池的使用,
  *

  • class TestGenericObjectPool 表示一个测试使用对象池的具体例子
      *
  • class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
      *
  • class Student 表示 需要使用对象池来维护的类


      *


      * 引用了 common-collcetions-2.1 ,commons-pool-1.1
      *


      *

    Copyright: Copyright (c) 2004


      *

    Company: netsky


      * @author wdz( hotmail =wdz123@hotmail.com)
      * @version 1.0
      * @see {@link TestGenericObjectPool},
      * org.apache.commons.pool.impl.GenericObjectPool,org.apache.commons.pool.PoolableObjectFactory
      */
      
      public class Student {
      private String sex;
      private String name;
      private int studentid;
      private int age;
      public Student() {
      }
      
      public static void main(String[] args) {
      Student student1 = new Student();
      
      }
      
      public String getSex() {
      return sex;
      }
      
      public void setSex(String sex) {
      this.sex = sex;
      }
      
      public String getName() {
      return name;
      }
      
      public void setName(String name) {
      this.name = name;
      }
      
      public int getStudentid() {
      return studentid;
      }
      
      public void setStudentid(int studentid) {
      this.studentid = studentid;
      }
      
      public void clear() {
      studentid = 0;
      name = "";
      age = 0;
      sex = "";
      
      }
      
      public int getAge() {
      return age;
      }
      
      public void setAge(int age) {
      this.age = age;
      }
      
      public String toString() {
      return "id =" + studentid + ",name =" + name + ",age=" + age + ",sex=" +
      sex;
      }
      }
      
      Class WdzPoolableObjectFactory --code
      package impl_genericobjectpool_test;
      
      import org.apache.commons.pool.impl.*;
      import org.apache.commons.pool.*;
      
      /**
      *

    Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用


      *

    Description:
      * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.


      *

    基本对象池的使用,
      *

  • class TestGenericObjectPool 表示一个测试使用对象池的具体例子
      *
  • class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
      *
  • class Student 表示 需要使用对象池来维护的类


      *


      * 引用了 common-collcetions-2.1 ,commons-pool-1.1
      *


      *

    Copyright: Copyright (c) 2004


      *

    Company: netsky


      * @author wdz( hotmail =wdz123@hotmail.com)
      * @version 1.0
      */
      
      
      public class WdzPoolableObjectFactory
      implements PoolableObjectFactory {
      
      /**
      * 创建对象实例。同时可以分配这个对象适用的资源。
      * **/
      public Object makeObject() throws Exception {
      return new Student();
      };
      
      /**
      * 销毁对象,实际上提供了释放对象占用资源的接口。
      * destroyObject is invoked on every instance when it is being "dropped"
      * from the pool (whether due to the response from validateObject,
      * or for reasons specific to the pool implementation.)
      * */
      public void destroyObject(Object obj) throws Exception {
      }
      
      /***
      * 这个方法一般在 activateObject 方法执行后调用
      * 检查对象的有效性
      * validateObject is invoked in an implementation-specific fashion to
      * determine if an instance is still valid to be returned by the pool.
      * It will only be invoked on an "activated" instance.
      * **/
      public boolean validateObject(Object obj) {
      return true;
      }
      
      /**
      * 激活一个对象。
      * activateObject is invoked on every instance before it is returned from the pool.
      * **/
      public void activateObject(Object obj) throws Exception {
      }
      
      /**
      * 挂起一个对象
      * passivateObject is invoked on every instance when it is returned to the pool
      * **/
      public void passivateObject(Object obj) throws Exception {
      if (obj instanceof Student) {
      ( (Student) obj).clear();
      }
      }
      }
      package impl_genericobjectpool_test;
      
      import org.apache.commons.pool.impl.*;
      import org.apache.commons.pool.*;
      
      /**
      *

    Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用


      *

    Description:
      * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.


      *

    基本对象池的使用,
      *

  • class TestGenericObjectPool 表示一个测试使用对象池的具体例子
      *
  • class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
      *
  • class Student 表示 需要使用对象池来维护的类


      *


      * 引用了 common-collcetions-2.1 ,commons-pool-1.1
      *


      *

    Copyright: Copyright (c) 2004


      *

    Company: netsky


      * @author wdz( hotmail =wdz123@hotmail.com)
      * @version 1.0
      */
      
      public class TestGenericObjectPool {
      private void testBorrowObject(GenericObjectPool pool, int kk) {
      try {
      Student[] student = new Student[10];
      for (int i = 0; i < 10; i++) {
      student[i] = (Student) (pool.borrowObject());
      student[i].setStudentid(i * 10000 + kk);
      student[i].setAge(i * 1000 + kk);
      student[i].setName("wdzname" + i * 100 + kk);
      }
      for (int i = 0; i < 10; i++) {
      System.out.println("student[" + i + "]=" + student[i]);
      pool.returnObject(student[i]);
      if (i == 9) {
      //察看对象回到对象池的状态
      System.out.println("****student[9]=" + student[9]);
      }
      }
      
      }
      catch (Exception ex) {
      ex.printStackTrace();
      }
      
      }
      
      public TestGenericObjectPool() {
      org.apache.commons.pool.PoolableObjectFactory factory = new
      WdzPoolableObjectFactory();
      GenericObjectPool pool = new GenericObjectPool(factory, 4000 * 10,
      GenericObjectPool.WHEN_EXHAUSTED_GROW, 3000 * 10, true, true);
      System.out.println("group1");
      testBorrowObject(pool, 1);
      System.out.println("group2");
      testBorrowObject(pool, 2);
      
      }
      
      public static void main(String[] args) {
      TestGenericObjectPool test = new TestGenericObjectPool();
      }
      }

  • <table width="96%"> <tr> <td background="http:///images/dian.gif" height="3"></td> </tr> </table>

    ↑返回目录
    前一篇: 面向对象的设计法确保软件的健壮性
    后一篇: 异常处理:和日志集成