日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java资源池的实现

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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资源池的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。