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 是在具体实现类中可存放任意的对象,附件中存有测试代码。
相关推荐
在Java编程中,对象池是一种优化资源管理的技术,...我们可以借鉴Jakarta Commons Pool的设计思路,实现自己的轻量级对象池,满足特定场景的需求。理解并熟练运用对象池,对于提升Java应用的性能和资源利用率至关重要。
轻量级内存池设计的目标是提供一个高效、易用且线程安全的解决方案,尤其适用于多线程环境中的短生命周期对象。 在C++中,内存池通常通过自定义的数据结构来实现,例如`BufPool`可能就是这样一种结构。`BufPool.cpp...
EasyObjectsPool就是这样一款专为Unity开发者设计的轻量级对象池插件,它的出现使得对象池的实现变得简单易用。 一、EasyObjectsPool的基本概念与作用 1.1 对象池原理:对象池机制类似于现实生活中的资源库,将...
资源介绍 ... A lightweight object pool. You need to create an ...轻量级对象池。 你需要在场景中创建一个对象,然后挂起它。 支持自动扩容。 支持回收检测。 支持父节点回收 同时自动回收自身挂的所有对象池组件
下面将详细介绍内存池的原理、实现方式以及轻量级实现中的关键点。 内存池的基本思想是将内存的申请和释放过程集中管理。通常,系统默认的内存分配器(如C++的`new`和`delete`)在分配小块内存时会有一定的开销,...
标题:“Spring轻量级与EJB重量级容器的比较” 描述:“我自己做的第一个文档” 标签:“容器” 部分内容:本文档旨在深入探讨Spring轻量级容器与EJB重量级容器的区别,通过对这两个概念的剖析,帮助读者理解它们...
1. **查询构造器**:许多轻量级框架如Phalcon、Laravel的Eloquent、Doctrine等都提供了查询构造器,允许开发者通过链式调用来构建复杂的SQL查询,而无需直接编写SQL语句。这种方式降低了SQL注入的风险,并提高了代码...
2. **Easy Object Pool**:轻量级且易于理解的插件,适用于小型项目和初学者。 3. **Unity Asset Store搜索“Pooling”**:Asset Store中还有许多其他优秀的选择,可以根据项目需求和评价选择适合的插件。 ### ...
在《轻量级Java EE企业应用实战第三版》中,第二章主要探讨了Java EE的基础概念和核心组件,以及如何构建轻量级的企业级应用程序。本章源码提供了实际操作的示例,帮助读者深入理解Java EE开发的关键技术。下面我们...
标题中的“对象池工厂(微型IOC容器)”是一个关于软件设计模式和轻量级依赖注入框架的概念。对象池是一种优化技术,用于管理对特定类型对象的创建和复用,以提高性能,减少系统资源的消耗。它通过维护一个对象集合来...
《Java_Web轻量级开发全体验》这本书深入浅出地介绍了使用Java技术进行Web应用程序开发的方法和实践。这本书的核心内容涵盖了Java Web开发中的多个重要知识点,包括但不限于以下几个方面: 1. **Java基础**:首先,...
ORM(Object-Relational Mapping,对象关系...通过对这些知识点的深入学习,开发者不仅可以掌握轻量级ORM框架的使用,还能提升在数据库操作和面向对象编程方面的技能,这对于任何涉及到数据库操作的项目都是宝贵的财富。
标题 "基于struts+spring+ibatis的轻量级J2EE开发" 指向的是一个关于使用Struts、Spring和iBatis这三种开源框架进行轻量级Java企业级应用开发的主题。这个组合通常被称为SSM(Struts、Spring、MyBatis)框架集成,是...
这个轻量级中间件包含了一系列的组件,如配置文件、数据库连接池、JSON序列化和Unidac驱动支持,这些都是构建现代应用程序不可或缺的部分。 首先,`clean.bat`是一个批处理文件,通常用于清理项目生成过程中的临时...
NuRaft 库是这个轻量级 C++ 实现的核心,它包含了以下关键组件: 1. **服务器状态机(Server State Machine)**:每个节点都有一个状态机,用于处理客户端的请求并存储最终一致的状态。 2. **日志(Log)**:存储了...
在本资源中,我们关注的是"轻量级Java EE企业应用实战第三版第一章源码"。这通常是指一本关于使用轻量级Java EE框架构建企业级应用的书籍的配套代码,第一章的源码部分。轻量级Java EE指的是不依赖大型、重型容器如...
因此,为了提高开发效率和代码的可读性,通常会进行轻量级的JDBC封装,这就是“轻量级jdbc 封装类”的概念。 轻量级JDBC封装类的目标是简化上述流程,提供更简洁、易用的API,同时保持灵活性,以便在不依赖大型ORM...
通用泳池经理一个轻量级对象池实现示例 class MyClass{}class MyResetableClass : IPoolable{ public void ResetState(){ // reset the state of this object }} void Demo(){ var o = PoolManager.Instance....
标题中的“HDF reader 读取HDF数据集文件专用轻量级软件”指的是一个专门用来读取HDF格式数据的轻量级工具。这类软件通常具有简洁的用户界面和高效的性能,使得用户能够方便地访问和探索HDF文件中的数据内容。 描述...