熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java程序性能優化-對象復用“池”(3)[1]

2022-06-13   來源: Java高級技術 

    對象復用

  在第Semaphore信號量一節中使用了信號量同步機制實現了一個簡單的對象池讀者可以參考相關代碼在此不予重復該對象池使用一個對象數組和一個標志位布爾數組分別表示池中的對象和對象的可用性(一個對象一次只能被一個線程使用)在獲取對象時在池中找到一個可用的對象(標志位為空閒)返回並將標志位設置為使用中當對象使用完成後標志位設置為空閒歸還對象池等待下次使用

  在實際開發中開發人員完全不必自行開發對象池在Apache中已經提供了一個Jakarta Commons Pool對象池組件可以直接使用

  Jakarta Commons Pool定義的對象池接口如下

  public interface ObjectPool<T> {

  T borrowObject()

  void returnObject(T borrowed)

  }

  其中borrowObject()方法從對象池中取得一個對象returnObject()方法在使用完成後將對象返回給對象池

  另一個重要的接口是PoolableObjectFactory它告訴對象池如何創建一個對象如何銷毀一個對象它的定義如下

  public interface PoolableObjectFactory<T> {

  T makeObject()

  void activateObject(T obj)

  void passivateObject(T obj)

  boolean validateObject(T obj)

  void destroyObject(T obj)

  }

  PoolableObjectFactory接口的方法都將被對象池回調以指導對象池在對象的生命周期中如何管理這些對象

  PoolableObjectFactory接口的主要方法如下

  makeObject()定義如何創建一個新的對象實例

  activateObject()在對象從對象池取出前會激活這對象

  passivateObject()在對象返回對象池時被調用

  destroyObject()對象從對象池中被銷毀時會執行這個方法

  validateObject()判斷對象是否可用

[]  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27797.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.