首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Apache Commons Pool 2 實戰:構建高性能對象池化技術

     編輯:Java 綜合教學

核心類:org.apache.commons.pool2.ObjectPool

兩步完成對象池構建:

1. 創建對象工廠:繼承 BasePooledObjectFactory

public class ObjectFactory extends BasePooledObjectFactory<ObjectFactory.Computer> {
    @Override
    public Computer create() throws Exception {
        return new Computer("mac"); // 返回需要池化的對象實例
    }
    @Override
    public PooledObject<Computer> wrap(Computer obj) {
        return new DefaultPooledObject<>(obj); // 包裝為池化對象
    }
    public static class Computer { String name; public Computer(String n){ this.name=n; } }
}

2. 使用 GenericObjectPool

ObjectFactory factory = new ObjectFactory();
ObjectPool<ObjectFactory.Computer> pool = new GenericObjectPool<>(factory);

// 線程 1 借用並歸還
new Thread(() -> {
    try {
        Computer c = pool.borrowObject();
        System.out.println(Thread.currentThread().getId() + ":" + c);
        pool.returnObject(c);
    } catch (Exception e) { e.printStackTrace(); }
}).start();

// 線程 2 再次借用,驗證復用同一對象
new Thread(() -> {
    try {
        System.out.println(Thread.currentThread().getId() + ":" + pool.borrowObject());
    } catch (Exception e) { e.printStackTrace(); }
}).start();

輸出驗證

11:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd4
12:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd4

兩個線程先後獲取到同一對象實例,證明池化復用生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved