隨筆 - 1, 文章 - 0, 評論 - 5, 引用 - 0
          數據加載中……

          2009年12月10日

          Java對象池的簡單應用

          Apache 的commons pool框架為我們提供了對象池封裝技術,也就是大家說的緩存技術,個人感覺還是不錯的。

          以下是一個簡單的例子,希望能夠起到拋磚引玉的作用,當然如果要應用到實際項目中的話,還需要完善很多內容,比如對象池的參數配置、日志處理、異常解決。。。

          需要緩存的對象:
          public class Employee {
                
          static int counter=0;
                
          private String name;
                
          private int id;

                
          public Employee(String name) {
                  
          this.name=name;
                  
          this.id=++counter;
                  System.out.println(name
          +" is created!");
                }


                
          public String getName() {
                  
          return this.name;
                }


                
          public void setName(String name) {
                  
          this.name = name;
                }


                
          public void doWork() {
                  System.out.println(
          this.toString()+" do some thing");
                }


                
          public String toString() {
                  
          return (" Name: " + this.name+",id:"+this.id);
                }


                
          public void finalize() {
                  System.err.println(
          "Employee " + toString() + " made redundant");
                }

              }



          創建緩存對象工廠,由于框架提供了一個基本的BaseKeyedPoolableObjectFactoy創建工廠,可以直接繼承并實現makeObject方法,也就是創建緩存對象的具體實現,當然還有其他的創建工廠,這里就不具體講了,可以查看Apache的相關資料。
          import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;

          public class EmployeeFactory extends BaseKeyedPoolableObjectFactory {

              @Override
              
          public Object makeObject(Object key) throws Exception {
                  
          return new Employee((String)key);
              }


               
          }

          客戶端的調用例子,pool.addObject增加緩存對象,borrowObject從緩存中獲取對象,如果沒有則會創建一個新對象,returnObject釋放對象,即使用完對象后要釋放對象到緩存中。
          public class TestKeyedObjectPool {
              
          public static void main(String args[]) throws Exception {

                  GenericKeyedObjectPool pool 
          = new GenericKeyedObjectPool();
                  pool.setFactory(
          new EmployeeFactory());

                  pool.addObject(
          "Peter");
                  pool.addObject(
          "Jerry");
                  pool.addObject(
          "Richard");
                  pool.addObject(
          "Peter");

                System.out.println(
          "Number of Peter employees in pool: " +
                    pool.getNumIdle(
          "Peter"+ " out of total employees: " +
                    pool.getNumIdle());

                  Employee employee 
          = (Employee)pool.borrowObject("Peter");
                  employee.doWork();
                  pool.returnObject(
          "Peter", employee);
                  
                System.out.println(
          "Number of Peter employees in pool: " +
                            pool.getNumIdle(
          "Peter"+ " out of total employees: " +
                            pool.getNumIdle());
                }


          }


          運行結果:
          Peter is created!
          Jerry is created
          !
          Richard is created
          !
          Peter is created
          !
          Number of Peter employees in pool: 
          2 out of total employees: 4
           Name: Peter,id:
          1 do some thing
          Number of Peter employees in pool: 
          2 out of total employees: 4

          posted @ 2009-12-10 17:50 伊布 閱讀(2029) | 評論 (5)編輯 收藏

          主站蜘蛛池模板: 穆棱市| 涿州市| 双桥区| 寿阳县| 航空| 东莞市| 霸州市| 娄底市| 类乌齐县| 阿尔山市| 颍上县| 广州市| 澎湖县| 娱乐| 游戏| 阿合奇县| 张掖市| 尼勒克县| 通江县| 南召县| 诸暨市| 天镇县| 承德市| 萨嘎县| 德州市| 乌拉特后旗| 阳高县| 辉县市| 莎车县| 三门峡市| 四子王旗| 兴海县| 嘉兴市| 贡觉县| 新邵县| 江北区| 富顺县| 金阳县| 牟定县| 新闻| 客服|