首页 > 学院 > 开发设计 > 正文

基本对象池的使用

2019-11-18 12:07:00
字体:
来源:转载
供稿:网友

  /**
  * <p>Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用 </p>
  * <p>Description:
  * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.</p>
  * <p>基本对象池的使用,
  * <LI>class TestGenericObjectPool 表示一个测试使用对象池的具体例子
  * <LI>class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
  * <LI>class Student 表示 需要使用对象池来维护的类</p>
  * <p>
  * 引用了 common-collcetions-2.1 ,commons-pool-1.1
  * </p>
  * <p>Copyright: Copyright (c) 2004</p>
  * <p>Company: netsky</p>
  * @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.*;
  
  /**
  * <p>Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用 </p>
  * <p>Description:
  * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.</p>
  * <p>基本对象池的使用,
  * <LI>class TestGenericObjectPool 表示一个测试使用对象池的具体例子
  * <LI>class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
  * <LI>class Student 表示 需要使用对象池来维护的类</p>
  * <p>
  * 引用了 common-collcetions-2.1 ,commons-pool-1.1
  * </p>
  * <p>Copyright: Copyright (c) 2004</p>
  * <p>Company: netsky</p>
  * @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.*;
  
  /**
  * <p>Title: 基本对象池(org.apache.commons.pool.impl.GenericObjectPool)的使用 </p>
  * <p>Description:
  * 测试 org.apache.commons.pool.impl.GenericObjectPool 和 org.apache.commons.pool.PoolableObjectFactory的使用.</p>
  * <p>基本对象池的使用,
  * <LI>class TestGenericObjectPool 表示一个测试使用对象池的具体例子
  * <LI>class WdzPoolableObjectFactory 表示1个自己定义的生成对象的工厂
  * <LI>class Student 表示 需要使用对象池来维护的类</p>
  * <p>
  * 引用了 common-collcetions-2.1 ,commons-pool-1.1
  * </p>
  * <p>Copyright: Copyright (c) 2004</p>
  * <p>Company: netsky</p>
  * @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();
  }
  }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表