GenericObjectPool :CursorableLinkedList容器 GenericKeyedObjectPool :CursorableLinkedList容器 SoftReferenceObjectPool :ArrayList容器--一次性创建所有池化对象, 并对容器中的对象进行了软引用(SoftReference)处理, 从而保证在内存充足的时候池对象不会轻易被jvm垃圾回收, 从而具有很强的缓存能力. StackObjectPool : Stack容...
importorg.apache.commons.pool2.impl.GenericObjectPoolConfig;publicclassPoolConfig{publicstaticGenericObjectPoolConfig<MyObject>createConfig(){GenericObjectPoolConfig<MyObject>config=newGenericObjectPoolConfig<>();// 设置最大对象数量config.setMaxTotal(10);// 设置最大空闲对象数量config.setMaxIdle(5);//...
3. 对象池(Object Pool) 对象池用于管理可重用对象,减少创建和销毁的开销。常用库有: - Apache Commons Pool: 提供通用对象池实现。 GenericObjectPool<MyObject> pool = new GenericObjectPool<>(new MyObjectFactory()); MyObject obj = pool.borrowObject(); // 使用对象 pool.returnObject(obj); ...
ObjectPool pool = new ObjectPool(10,50); IPooledObject object = pool.borrowObject(); object.operation(); pool.returnObject(object); System.out.println(); } //抽象对象 interface IPooledObject { void operation(); } //具体对象 static class ConcretePoolObject implements IPooledObject { publi...
public String borrowObject() { String object = pool.poll(); // 从队列中取出一个对象 if (object == null) { // 如果池子空了,就新建一个对象(在实际应用中应避免) object = "新对象"; } return object; } // 归还对象到池子中 public void returnObject(String object) { ...
Apache Common Pool2 源码分析 我们来简要分析 Pool2 的源码( 2.8.0版本 )实现,了解池化技术的基本原理,为后续了解和分析 HikariCP 和 Druid 打下基础,三者在设计思路具有互通之处。 通过前边的实例,我们知道通过borrowObject和returnObject从对象池中接取或者归还对象,进行这些操作时,封装实例 PooledObject 的状态...
Apache Common Pool2 的核心内部类如下: ObjectPool:对象池接口,对象池实体,取用对象的地方。 对象的提供与归还(工厂来操作):borrowObject returnObject 创建对象(使用工厂来创建):addObject 销毁对象(使用工厂来销毁):invalidateObject 池中空闲对象数量、被使用对象数量:getNumActive getNumIdle ...
ObjectPool 就是对象池,提供了borrowObject和returnObject等一系列函数。 PooledObject 是池化对象的封装类,负责记录额外信息,比如说对象状态,对象创建时间,对象空闲时间,对象上次使用时间等。 PooledObjectFactory 是负责管理池化对象生命周期的工厂类,提供makeObject,destroyObject,activateObject和validateObject等一系列函数。
public class Pool { public static void main(String[] args) throws Exception { ObjectPool pool = new StackObjectPool(new UserFactory()); User u = (User) pool.borrowObject(); // 从池中借出一个对象 u.setName("me"); u.sayHello(); ...
publicTborrowObject(finalDuration borrowMaxWaitDuration)throwsException{ //此处省略若干行 while(p ==null) { create =false; //首先尝试从池子中获取。 p = idleObjects.pollFirst(); // 池子里获取不到,才调用工厂内生成新实例 if(p ==null) { ...