Pool
简单对象池封装。
创建
// Const pool
Pool.fixedConsts(Arrays.asList("a", "b"));
// SimplePool
Pool.builder()
.capacity(1)
.creator(Object::new)
.build();
// ExpiringPool
Pool.builder()
.capacity(1)
.creator(Object::new)
.maxIdleTime(Duration.ofSeconds(1))
.build();
// Weak reference pool, collect by GC
Pool.builder()
.capacity(1)
.creator(Object::new)
.refType(PoolRefType.Weak)
.build();
// Soft reference pool, notify by GC but collect by OOM
Pool.builder()
.capacity(1)
.creator(Object::new)
.refType(PoolRefType.Soft)
.build();
// fully build
AtomicInteger counter = new AtomicInteger(0);
Pool.builder()
.capacity(1) // 总容量
.creator(Object::new) // 新元素创建起
.refType(PoolRefType.Soft) // 引用类型
.reseter(obj -> counter.incrementAndGet()) // 用于重置池中元素状态
.disposer(obj -> counter.incrementAndGet()) // 用于销毁池中元素
.checker(obj -> Objects.nonNull(obj)) // 用于检查池中元素可用性
.maxIdleTime(Duration.ofMillis(100)) // 最大空闲时间,之后被逐出
.build();
操作
pool.fill(); // 填充元素
pool.clear(); // 清空元素
pool.close(); // 销毁元素并关闭池
pool.acquire().get(); // 获取值
pool.acquire().release(); // 释放值
pool.acquire().invalidate(); // 销毁-不再返回池
pool.acquire().map(function); // 执行函数并释放
pool.refType(); // 引用类型
pool.capacity(); // 容量
pool.live(); // 已创建数量:池中+已租借
pool.size(); // 池中数量
pool.leased(); // 已租借数量