乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      commons

       360lec 2017-05-02

      一、背景介紹

          創(chuàng)建新的對象并初始化的操作,可能會消耗很多的時間。在需要頻繁創(chuàng)建并使用這些對象的場景中,為了提供系統(tǒng)性能,通常的做法是,創(chuàng)建一個對象池,將一定數(shù)量的對象緩存到這個對象池中。需要使用時直接從對象池中取出對象,使用完后將對象扔回到對象池中即可。Apachecommons pool組件是我們實現(xiàn)對象池化技術(shù)的良好助手。

      二、組件基本介紹 

      該項目是一個基本的對象池組件;Pool提供三個主要方面對象池的API:

      a)  一個提供客戶方和實現(xiàn)方用來實現(xiàn)簡單、可變的對象池的基本接口。

      b)  一個用來創(chuàng)建模塊化對象池的工具。

      c)  幾個通用的對象池的實現(xiàn)。

       

      三、組件特點

          org.apache.commons.pool包定義了一部分在創(chuàng)建一個新的對象池實現(xiàn)時十分有用的接口和基本類。

      四、對象池

          (1)ObjectPool    

          ObjectPool定義了一個簡單小巧的池化接口,主要有GenericObjectPool、StackObjectPool、SoftReferenceObjectPool三個實現(xiàn)類;

          a)GenericObjectPool:可配置LIFO/FIFO行為的ObjectPool的實現(xiàn)。默認采用LIFO隊列方式。這意味著當有閑置的可用對象在對象池中時,borrowObject方法會返回最近的實例。如果配置文件中的lifo配置項的值為false,則將返回相反排序的實例,也就是會返回最先進入對象池的對象的實例。

          b)StackObjectPool:使用LIFO行為實現(xiàn)的ObjectPool。

          c)SoftReferenceObjectPool:使用LIFO行為實現(xiàn)的ObjectPool。此外,在這個對象池實現(xiàn)中,每個對象都會被包裝到一個SoftReference中。SoftReference允許垃圾回收機制在需要釋放內(nèi)存時回收對象池中的對象。

          (2)KeyedObjectPool

          KeyedObjectPool對象池有多種類型情況的對象池的實現(xiàn),每種類型對應(yīng)一個任意的鍵值,組件給出了GenericKeyedObjectPool、StackKeyedObjectPool兩個基本的實現(xiàn)類;

          a)GenericKeyedObjectPool:通過FIFO行為實現(xiàn)的對象池。

          b)StackKeyedObjectPool:通過LIFO行為實現(xiàn)的對象池。

      五、PoolableObjectFactory、ObjectPool及ObjectPoolFactory

       commons pool組件中,對象池化的工作被劃分給了三類對象: PoolableObjectFactoryExample.java

      (1)       PoolableObjectFactory用于管理池化對象的產(chǎn)生、激活、掛起、校驗和銷毀;

       

      (2)       ObjectPool用于管理要被池化的對象的借出和歸還,同時通知PoolableObjectFactory完成相應(yīng)的工作;

      (3)       ObjectPoolFactory則用于大量生成相同類型和設(shè)置的ObjectPool;

           相應(yīng)的,使用Pool組件的過程,也可大體劃分成“實現(xiàn)自己的PoolableObjectFactory”、“使用

        ObjectPool”和可選的“利用ObjectPoolFactory”三個步驟。

      (1) 實現(xiàn)自己的PoolableObjectFactory

           ObjectPool的實例在需要處理池化的對象的產(chǎn)生、激活、掛起、校驗和銷毀工作時,就會調(diào)用跟它

       關(guān)聯(lián)在一起的PoolableObjectFactory實例的相應(yīng)方法來操作。PoolableObjectFactory是commons-pool

       中定義個一個接口,Pool組件中沒有包含任何一種PoolableObjectFactory實現(xiàn),需要根據(jù)情況自行創(chuàng)立。

       

      Java代碼 復(fù)制代碼 收藏代碼
      1. // 該方法用于產(chǎn)生你要放入到對象池中的新對象   
      2. Object makeObject() throws Exception;   
      3.   
      4. // 該方法用于銷毀對象   
      5. void destroyObject(Object obj) throws Exception;   
      6.   
      7.   
      8. boolean validateObject(Object obj);   
      9.   
      10.   
      11. void activateObject(Object obj) throws Exception;   
      12.   
      13. // 該方法用于將對象“掛起”,將對象設(shè)置為休眠狀態(tài)即不可用   
      14. void passivateObject(Object obj) throws Exception;  

       

       

       

      ObjectPool是Pool組件中定義的一個接口,實際使用的時候同樣需要利用這個接口的具

      體實現(xiàn)。Pool組件本身提供了幾種實現(xiàn),可以直接使用。當然也可以自行創(chuàng)建。

      ObjectPool的使用方法:

      (a)、  生成一個要用的PoolableObjectFactory類的實例

      PoolableObjectPoolFactory factory = new PoolableObjectPoolFactoryExample();

      (b)、  利用PoolableObjectPoolFactory實例為參數(shù),生成一個實現(xiàn)了ObjectPool接口的類的實

      例,作為對象池ObjectPool pool = new StackObjectPool(factory);

      (c)、  需要從對象池中獲取對象時,調(diào)用對應(yīng)的borrowObject()方法Object obj = pool.borrowObject();

      (d)、  將對象放回對象池中,調(diào)用returnObject(Object obj)方法pool.returnObject(obj);

      (e)、  當不再需要對象池時,直接調(diào)用對象池上的close()方法,釋放資源。pool.close();

      另外,ObjectPool接口還定義了幾個可以由具體的實現(xiàn)決定要不要支持的操作,包括:

      void clear()

      清除所有當前在此對象池中休眠的對象。

      int getNumActive()

      返回已經(jīng)從此對象池中借出的對象的總數(shù)。

      int getNumIdle()

      返回當前在此對象池中休眠的對象的數(shù)目。

      void setFactory(PoolableObjectFactory factory)

      將當前對象池與參數(shù)中給定的PoolableObjectFactory相關(guān)聯(lián)。如果在當前狀態(tài)下,無法

      完成這一操作,會有一個IllegalStateException異常拋出。

      (3)使用ObjectPoolFactory

      ObjectPoolFactory是Pool組件中定義的一個接口,它定義了一個createPool()方法,可以

      用于大量產(chǎn)生類型和設(shè)置都相同的ObjectPool的對象。

      Pool組件中,對每一個ObjectPool的實現(xiàn),都有一個對應(yīng)的ObjectPoolFactory實現(xiàn)。

      最后給出一個較為完整的例子:

       

      Java代碼 復(fù)制代碼 收藏代碼
      1. package org.apache.commons.pool;   
      2.   
      3. public class PoolableObjectFactoryExample implements PoolableObjectFactory   
      4. {   
      5.       
      6.     private static int count 0;   
      7.   
      8.       
      9.     @Override  
      10.     public void activateObject(Object obj) throws Exception   
      11.     {   
      12.         System.out.println("destroyObject run obj);   
      13.     }   
      14.   
      15.       
      16.     @Override  
      17.     public void destroyObject(Object obj) throws Exception   
      18.     {   
      19.         System.out.println("destroyObject run obj);   
      20.     }   
      21.   
      22.       
      23.     @Override  
      24.     public Object makeObject() throws Exception   
      25.     {   
      26.         String obj String.valueOf(count);   
      27.         System.out.println("makeObject run obj);   
      28.         return obj;   
      29.     }   
      30.   
      31.       
      32.     @Override  
      33.     public void passivateObject(Object obj) throws Exception   
      34.     {   
      35.         System.out.println("passivateObject run obj);   
      36.     }   
      37.   
      38.       
      39.     @Override  
      40.     public boolean validateObject(Object obj)   
      41.     {   
      42.         boolean flag false;   
      43.         if(obj.equals(obj))   
      44.         {   
      45.             flag true;   
      46.         }   
      47.         return flag;   
      48.     }   
      49.   
      50.  

       

      ObjectPoolExample.java
      
      Java代碼 復(fù)制代碼 收藏代碼
      1. package org.apache.commons.pool;   
      2.   
      3. import org.apache.commons.pool.impl.StackObjectPoolFactory;   
      4.   
      5. public class ObjectPoolExample   
      6. {   
      7.     public static void main(String[] args)   
      8.     {   
      9.         // 生成PoolableObjectFactory實例   
      10.         PoolableObjectFactory _factory new PoolableObjectFactoryExample();   
      11.         // 生成一個ObjectPoolFactory實例   
      12.         ObjectPoolFactory objFactory new StackObjectPoolFactory(_factory);   
      13.         // 生成一個ObjectPool實例   
      14.         ObjectPool pool objFactory.createPool();   
      15.         // 獲取對象池中的一個可用對象   
      16.         try  
      17.         {   
      18.             Object obj pool.borrowObject();   
      19.             // 使用對象   
      20.             pool.returnObject(obj);   
      21.             obj null;   
      22.         }   
      23.         catch(Exception ex)   
      24.         {   
      25.             ex.printStackTrace();   
      26.         }   
      27.         finally  
      28.         {   
      29.             try  
      30.             {   
      31.                 // 關(guān)閉對象池   
      32.                 pool.close();   
      33.                 pool null;   
      34.             }   
      35.             catch(Exception ex)   
      36.             {   
      37.                 ex.printStackTrace();   
      38.             }   
      39.         }   
      40.     }   
      41.  

       

       

      來自http://blog.sina.com.cn/s/blog_9076f9ba01016fap.html

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多