最近在寫一個ftp上傳工具,用到了apache的ftpclient,為了提高上傳效率,我采用了多線程的方式,但是每個線程頻繁的建立和銷毀ftpclient對象勢必會造成不必要的開銷,是以,此處最好使用一個ftpclient連接配接池。仔細翻了一下apache的api,發現它并沒有一個ftpclientpool的實作,是以,不得不自己寫一個ftpclientpool。下面就大體介紹一下開發連接配接池的整個過程,供大家參考。
有些對象的建立開銷是比較大的,比如資料庫連接配接等。為了減少頻繁建立、銷毀對象帶來的性能消耗,我們可以利用對象池的技術來實作對象的複用。對象池提供了一種機制,它可以管理對象池中對象的生命周期,提供了擷取和釋放對象的方法,可以讓用戶端很友善的使用對象池中的對象。
如果我們要自己實作一個對象池,一般需要完成如下功能:
為了友善我們開發自己的對象池,apache 提供的common-pool工具包,裡面包含了開發通用對象池的一些接口和實作類。其中最基本的兩個接口是objectpool 和poolableobjectfactory。
objectpool接口中有幾個最基本的方法:
poolableobjectfactory接口中幾個最基本的方法:
通過以上兩個接口我們就可以自己實作一個對象池了。
最近在開發一個項目,需要把hdfs中的檔案上傳到一組ftp伺服器,為了提高上傳效率,自然考慮到使用多線程的方式進行上傳。我上傳ftp用的工具是apache common-net包中的ftpclient,但apache并沒有提供ftpclientpool,于是為了減少ftpclient的建立銷毀次數,我們就自己開發一個ftpclientpool來複用ftpclient連接配接。
通過上面的介紹,我們可以利用apache提供的common-pool包來協助我們開發連接配接池。而開發一個簡單的對象池,僅需要實作common-pool 包中的objectpool和poolableobjectfactory兩個接口即可。下面就看一下我寫的實作:
寫一個objectpool接口的實作ftpclientpool
}
再寫一個poolableobjectfactory接口的實作ftpclientfactory
最後,我們最好給工廠傳遞一個參數對象,友善我們設定ftpclient的一些參數
ftpclientpool連接配接池類管理ftpclient對象的生命周期,負責對象的借出、規劃、池的銷毀等;ftpclientpool類依賴于ftpclientfactory類,由這個工程類來制造和銷毀對象;ftpclientfactory又依賴ftpclientconfigure類,ftpclientconfigure負責封裝ftpclient的配置參數。至此,我們的ftpclient連接配接池就開發完成了。