Skip to content

Apache Commons Pool

xml
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.12.0</version>
</dependency>

implementation group: 'org.apache.commons', name: 'commons-pool2', version: '2.12.0'

对象池

java
public static void main(String[] args) throws Exception {
	// 创建对象池
	ObjectPool<MyObject> pool = new GenericObjectPool<>(new MyObjectFactory());

	// 获取对象
	MyObject obj = pool.borrowObject();
	System.out.println("Borrowed object: " + obj);

	// 使用对象
	obj.doSomething();

	// 归还对象
	pool.returnObject(obj);
	System.out.println("Returned object");
}
java
class MyObject {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}
java
class MyObjectFactory extends BasePooledObjectFactory<MyObject> {
    @Override
    public MyObject create() {
        return new MyObject();
    }

    @Override
    public void destroyObject(org.apache.commons.pool2.PooledObject<MyObject> p) {
        // 销毁对象时的操作
        System.out.println("Destroying object");
    }

    @Override
    public boolean validateObject(org.apache.commons.pool2.PooledObject<MyObject> p) {
        // 在对象归还池之前,验证对象是否有效
        return true;
    }
}

在归还对象时,清除对象属性

  • 在 validateObject 中进行清理: validateObject 方法在对象归还池之前会被调用,用于检查对象的有效性。如果你希望对象归还时进行清理,可以在此方法中重置对象的状态
java
@Override
public boolean validateObject(PooledObject<MyObject> p) {
    MyObject obj = p.getObject();
    obj.resetState();  // 假设你有一个 `resetState()` 方法来清理内部状态
    return true; // 返回 true 表示对象有效
}