1. 程式人生 > 其它 >java資源池的實現

java資源池的實現

技術標籤:java設計模式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>

使用

  @Autowired
  private TestObjectPool testObjectPool;

    public void test() {
        TestObject testObject = null;
        try {
            testObject = testObjectPool.
borrowObject(); //省略業務程式碼... } catch (Exception e) { e.printStackTrace(); } finally { if (testObject != null) { //最終歸還物件到物件池 testObjectPool.returnObject(testObject); } } }

參考:
java物件池化技術
springboot使用commons-pool2實現物件池