java资源池的实现
1、資源池
對于共享資源,有一個很著名的設計模式:資源池。該模式正是為了解決資源頻繁分配、釋放所造成的問題的。把該模式應用到數據庫連接管理領域,就是建立一個數據庫連接池,提供一套高效的連接分配、使用策略,最終目標是實現連接的高效、安全的復用。還有一類對象池大家可能不太了解,對于nio中有個堆外內存,netty的ByteBuf對象的實現就是一個可復用的對象池來提高性能。連接池大家平時聽的多,使用也多,但是自己實現應該比較少。
1.1 LinkedBlockingQueue應用實例
并發庫中的BlockingQueue是一個比較好玩的類,顧名思義,就是阻塞隊列。該類主要提供了兩個方法put()和take(),前者將一個對象放到隊列中,如果隊列已經滿了,就等待直到有空閑節點;后者從head取一個對象,如果沒有對象,就等待直到有可取的對象。
一個簡單的資源池可以使用LinkedBlockingQueue實現,需要的對象如下:
ICommonPool : 定義通用池,借出對象和歸還對象
PoolFactory :對象工廠,負責創建和銷毀對象
PoolConfig : 對象池的配置(最大連接數和最小連接數)
BaseCommonPool :對象池的主要基礎實現
1.2 commons-pool2實現資源池
PooledObject(池化對象) PooledObjectFactory(對象工廠) ObjectPool (對象池)
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.2</version> </dependency>使用
@Autowiredprivate TestObjectPool testObjectPool;public void test() {TestObject testObject = null;try {testObject = testObjectPool.borrowObject();//省略業務代碼...} catch (Exception e) {e.printStackTrace();} finally {if (testObject != null) {//最終歸還對象到對象池testObjectPool.returnObject(testObject);}}}注意:使用對象要,需要returnObject,為了方便管理,可以參考數據庫連接池的service層的設計,當service拋出異常時,捕獲異常,釋放對象。
參考:
java對象池化技術
springboot使用commons-pool2實現對象池
commons-pools詳細參數配置
總結
以上是生活随笔為你收集整理的java资源池的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sýnesis™ Lite for Sn
- 下一篇: 基于词典的细粒度情感分析