Pool在N多环境下碰到,比如连接池、线程池、缓存池...
当某一对象从池中取得,那只有等待被用完放回去以后,其它的线程才能再次从池中获取。对象在池中是具有自己生命周期:创建、验证、使用、销毁等等。Pool的方式也许是最好的方式用来管理同一的资源。
运用的场景:
高频率的运用同一的资源
对象大且很消耗内存(DB连接)
需要长时间的初始化
IO消耗大
对象非线程安全
Apache Commons Pool 提供其轻量级的作用,不过它并未使用JDK1.5之后的Execute的框架,这是我觉得可能比较可惜的,就如同Proxool跟Boncp比较,性能指标提升最大一个就是分区和使用Execute、Guava等性能提升比较大的工具包。
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public abstract class ObjectPool<T> { private ConcurrentLinkedQueue<T> pool; private ScheduledExecutorService executorService; /** * Creates the pool. * * @param minIdle * 初始化最小的对象池中对象创建数量 */ public ObjectPool(final int minIdle) { // initialize pool initialize(minIdle); } /** * Pool创建 * * @param minIdle * 最小的数量 * @param maxIdle * 最大数量 * @param validationInterval * 检查最大/最小的池中的对象的频率 */ public ObjectPool(final int minIdle, final int maxIdle, final long validationInterval) { // initialize pool initialize(minIdle); // check pool conditions in a separate thread executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleWithFixedDelay(new Runnable() { @Override public void run() { int size = pool.size(); if (size < minIdle) { int sizeToBeAdded = minIdle - size; for (int i = 0; i < sizeToBeAdded; i++) { pool.add(createObject()); } } else if (size > maxIdle) { int sizeToBeRemoved = size - maxIdle; for (int i = 0; i < sizeToBeRemoved; i++) { pool.poll(); } } } }, validationInterval, validationInterval, TimeUnit.SECONDS); } /** * 获取对象,如果没有,那就创建且返回 * * @return T borrowed object */ public T borrowObject() { T object; if ((object = pool.poll()) == null) { object = createObject(); } return object; } /** * Returns object back to the pool. * * @param object * object to be returned */ public void returnObject(T object) { if (object == null) { return; } this.pool.offer(object); } /** * Shutdown this pool. */ public void shutdown() { if (executorService != null) { executorService.shutdown(); } } /** * Creates a new object. * * @return T new object */ protected abstract T createObject(); private void initialize(final int minIdle) { pool = new ConcurrentLinkedQueue<T>(); for (int i = 0; i < minIdle; i++) { pool.add(createObject()); } } }
抽象池中主要提供borrowObject 是在具体实现类中可存放任意的对象,附件中存有测试代码。
相关推荐
资源介绍 ... A lightweight object pool. You need to create an ...轻量级对象池。 你需要在场景中创建一个对象,然后挂起它。 支持自动扩容。 支持回收检测。 支持父节点回收 同时自动回收自身挂的所有对象池组件
java对象池轻量级实现,借鉴“Jakarta Commons Pool”组件实现思想。
通用泳池经理一个轻量级对象池实现示例 class MyClass{}class MyResetableClass : IPoolable{ public void ResetState(){ // reset the state of this object }} void Demo(){ var o = PoolManager.Instance....
ObjectMQ ( ) 是一个轻量级分布式对象层,位于与 AMQP 协议兼容的消息队列中间件之上。 它在消息中间件之上提供 1-1(同步、异步)和 1 对多(多)调用抽象。 要求 Java 1.6 或更新版本 兔MQ 建筑学 ObjectMQ 中的...
EasyObjectsPool是一个轻量级的Unity对象池插件,它简单好用,专为简化游戏对象的创建和销毁而设计,旨在提高游戏性能和优化内存使用。
很棒的MQ 目录介绍AwesomeMQ是与AMQP协议兼容的Message Queue中间件之上的轻量级分布式对象层。 它在消息传递中间件之上提供了1-1(同步,异步)和1-to-man(多)调用抽象。要求Java 1.6或更高版本兔子MQ建筑学...
极快的轻量级信号灯; 具有阻塞的线程安全队列(比BlockingCollection快5倍); 允许控制客户端输入的一些代码块; 允许限制每秒的最大请求数; -简单的控制反转容器; 弱引用订阅者的事件; -组织为双端队列元素的...
ThinkORM是一个可扩展轻量级的功能丰富的ORM,在Node.js环境中运行,已经支持Typescript。 ThinkORM尝试使用一种抽象的DSL语言,尽量保持各种数据库书写语法一致,用户专注于数据操作逻辑而非特定的数据存储类型,...
C++11实现的轻量级网络框架 项目介绍 参考了开源项目muduo和live555的设计,封装的一个简单的网络框架。 项目案例 目前情况 支持Windows和Linux平台, 在Windows下使用select, Linux下使用 epoll。 实现了定时器,...
memcached-lite是一个用于 Node.JS 的轻量级和快速的memcached 客户端。 它的开发是由于一些痛点和替代方案。 它仍在积极开发中,而且还没有像这样的替代品那样成熟。 谨慎使用。 使用二进制 memcached 协议而不是 ...
redislite redis-lite是 Node.JS 的轻量级 redis 客户端,具有一致的哈希集群/分片。 最终,它将支持 redis 集群实现。 使用一致的散列算法在多个 redis 服务器上分发密钥。 内置自动重新连接/故障转移机制。 流水线...
####DTO(数据传输对象) 提供有关异步启动数据库连接池的抽象。 有助于通过方法组织访问并指定具体的集合、表或哈希。 ####QTO(队列传输对象) 提供有关异步启动连接的抽象。 有助于发送和排出消息。 ####...
Pool :管理 Engine 对象的池。 表:数据库中的python对象映射表。 列:数据库中的python对象映射字段。 依赖关系 Python 2.6 - 2.7 MySQLdb-python 1.2.3+ 安装 从下载。 git clone ...
RuleGo是一个基于Go语言的轻量级、高性能、嵌入式的规则引擎。也一个灵活配置和高度定制化的事件处理框架。可以对输入消息进行聚合、分发、过滤、转换、丰富和执行各种动作。 本项目很大程度受thingsboard 启发。 ...
satoken 1.34.0 一个轻量级 Java 权限认证框架,取代spring oauth2 MyBatis 3.5.10 ORM框架 MyBatisPlus 3.5.3.1 基于mybatis,使用lambda表达式的 spring-doc 2.0.0 接口文档工具 jakarta-validation 3.0.2 验证...
okhttp3.2.0jar包,okhttp3jar包是一款可以支持android网络框架之OKhttp的jar包,一个处理网络请求的开源项目,是目前android安卓端最火热的轻量级框架。 okhttp3.2.0jar包框架特色 ·允许连接到同一个主机地址...
Java 提供对“轻量级持久化”的支持,未来的java版本可能会为持久化提供更全面的解决方案。 三.永远不需要销毁对象 在大多数程序设计语言中,变量声明周期的概念,占据了程序设计工作中非常重要的部分。变量...
1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以...
RRQMSocket是一个整合性的、超轻量级的、可以免费商用使用的网络通信服务框架。 它具有 高并发连接 、 高并发处理 、 事件订阅 、 插件式扩展 、 多线程处理 、 内存池 、 对象池 等特点, 让使用者能够更加简单的、...