iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Apache common-pool对象池介绍
  • 677
分享到

Java Apache common-pool对象池介绍

2024-04-02 19:04:59 677人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录对象生命周期Config详解代码说明ObjectPoolPooledObjectFactoryPooledObject方案提供了三种类型的pool前言; Apache commo

前言;

Apache common-pool对象池介绍:对象生命周期、Config详解、代码说明

对象生命周期

Config详解

  • maxActive: 链接池中最大连接数,默认为8.
  • maxIdle: 链接池中最大空闲的连接数,默认为8.
  • minIdle: 连接池中最少空闲的连接数,默认为0.
  • maxWait: 当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时.
  • minEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除。
  • softMinEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留“minIdle”个空闲连接数。默认为-1.
  • numTestsPerEvictionRun: 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
  • testOnBorrow: 向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。默认为false。建议保持默认值.
  • testOnReturn: 向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值.
  • testWhileIdle: 向调用者输出“链接”对象时,是否检测它的空闲超时;默认为false。如果“链接”空闲超时,将会被移除。建议保持默认值.
  • timeBetweenEvictionRunsMillis: “空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
  • whenExhaustedAction: 当“连接池”中active数量达到阀值时,即“链接”资源耗尽时,连接池需要采取的手段, 默认为1:
    • 0 : 抛出异常,
    • 1 : 阻塞,直到有可用链接资源
    • 2 : 强制创建新的链接资源

代码说明

  • 1. 整个方案从ObjectPool,PooledObjectFactory和PooledObject三个接口展开,
  • 2. 其中ObjectPool定义了对象池要实现的功能【比如怎么存取,怎么过期】;
  • 3. PooledObjectFactory定义了被池化的对象的创建,初始化,激活,钝化以及销毁功能;
  • 4. PooledObject定了一被池化对象的一些附加信息【创建时间,池中状态】;
  • 5. 大概流程就是由PooledObjectFactory创建的对象经过PooledObject的包装然后放到ObjectPool里面来

ObjectPool

//从池中获取对象
T borrowObject() throws Exception, NoSuchElementException,IllegalStateException;
//将对象放回池中
void returnObject(T obj) throws Exception;
//废弃对象
void invalidateObject(T obj) throws Exception;
//添加对象
void addObject() throws Exception, IllegalStateException,UnsupportedOperationException;
//获取对象个数
int getNumIdle();
//获取活跃对象个数
int getNuMactive();
//清除池,池可用
void clear() throws Exception, UnsupportedOperationException;
//关闭池,池不可用
void close();

PooledObjectFactory

//创建一个新对象;当对象池中的对象个数不足时,将会使用此方法来"输出"一个新的"对象",并交付给对象池管理
PooledObject<T> makeObject() throws Exception;
//销毁对象,如果对象池中检测到某个"对象"idle的时间超时,或者操作者向对象池"归还对象"时检测到"对象"已经无效,那么此时将会导致"对象销毁";"销毁对象"的操作设计相差甚远,但是必须明确:当调用此方法时,"对象"的生命周期必须结束.如果object是线程,那么此时线程必须退出;如果object是Socket操作,那么此时socket必须关闭;如果object是文件流操作,那么此时"数据flush"且正常关闭.
void destroyObject(PooledObject<T> p) throws Exception;
//检测对象是否"有效";Pool中不能保存无效的"对象",因此"后台检测线程"会周期性的检测Pool中"对象"的有效性,如果对象无效则会导致此对象从Pool中移除,并destroy;此外在调用者从Pool获取一个"对象"时,也会检测"对象"的有效性,确保不能讲"无效"的对象输出给调用者;当调用者使用完毕将"对象归还"到Pool时,仍然会检测对象的有效性.所谓有效性,就是此"对象"的状态是否符合预期,是否可以对调用者直接使用;如果对象是Socket,那么它的有效性就是socket的通道是否畅通/阻塞是否超时等.
boolean validateObject(PooledObject<T> p);
// "激活"对象,当Pool中决定移除一个对象交付给调用者时额外的"激活"操作,比如可以在activateObject方法中"重置"参数列表让调用者使用时感觉像一个"新创建"的对象一样;如果object是一个线程,可以在"激活"操作中重置"线程中断标记",或者让线程从阻塞中唤醒等;如果object是一个socket,那么可以在"激活操作"中刷新通道,或者对socket进行链接重建(假如socket意外关闭)等.
void activateObject(PooledObject<T> p) throws Exception;
//"钝化"对象,当调用者"归还对象"时,Pool将会"钝化对象";钝化的言外之意,就是此"对象"暂且需要"休息"一下.如果object是一个socket,那么可以passivateObject中清除buffer,将socket阻塞;如果object是一个线程,可以在"钝化"操作中将线程sleep或者将线程中的某个对象wait.需要注意的时,activateObject和passivateObject两个方法需要对应,避免死或者"对象"状态的混乱.
void passivateObject(PooledObject<T> p) throws Exception;

PooledObject

T getObject();
long getCreateTime();
long getActiveTimeMillis();
long getIdleTimeMillis();
long getLastBorrowTime();
long getLastReturnTime();
long getLastUsedTime();
int compareTo(PooledObject<T> other);
boolean equals(Object obj);
int hashCode();
String toString();
//后台清理线程
boolean startEvictionTest();
boolean endEvictionTest(Deque<PooledObject<T>> idleQueue);
boolean allocate();
boolean deallocate();
void invalidate()
void setLogAbandoned(boolean logAbandoned);
void use();
void printStackTrace(PrintWriter writer);
PooledObjectState getState();
//自动补偿功能
void markAbandoned();
void markReturning();

方案提供了三种类型的pool

  • GenericObjectPool是一般意义上的对象池;
  • SoftReferenceObjectPool是弱引用的对象池;
  • GenericKeyedObjectPool是具备分组的对象池。

到此这篇关于Java Apache common-pool对象池介绍的文章就介绍到这了,更多相关Java Apache common-pool内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Apache common-pool对象池介绍

本文链接: https://www.lsjlt.com/news/167679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Apache common-pool对象池介绍
    目录对象生命周期Config详解代码说明ObjectPoolPooledObjectFactoryPooledObject方案提供了三种类型的pool前言; Apache commo...
    99+
    2024-04-02
  • 利用Apache Common将java对象池化的问题
    什么是对象池化? 对象被创建后,使用完毕不是立即销毁回收对象,而是将对象放到一个容器保存起来,下次使用的时候不用创建对象,而是从容器中直接获取。 什么样的对象需要池化 一般需要池化的...
    99+
    2024-04-02
  • ASP.NETCore中的对象池介绍
    asp.net core中通过扩展库的方式提供给了一个标准的对象池ObjectPool,定义在Microsoft.Extensions.ObjectPool.dll 程序集中。它本身...
    99+
    2024-04-02
  • 详解Java中对象池的介绍与使用
    目录1. 什么是对象池2. 对象池解决什么问题3. 对象池的优缺点3.1 对象池的优点3.2 对象池弊端4. 对象池有什么特征5. 池的大小选择6. 对象池的使用6.1 接入6.2 ...
    99+
    2023-02-21
    Java对象池使用 Java对象池
  • .NET Core 中对象池 Object Pool的使用
    目录一、什么是对象池二、.NET Core 中的对象池三、本文小结一、什么是对象池 对象池简单来说就是一种为对象提供可复用能力的软件设计思路。我们常说有借有还,再借不难,而对象池就...
    99+
    2024-04-02
  • Java对象与Java类的详细介绍
    本篇内容介绍了“Java对象与Java类的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录面向对象是什么Java类什么是类Java...
    99+
    2023-06-20
  • Flask  request 对象介绍
    目录1、request请求对象1.1request请求对象的使用前言: 一个完整的 HTTP 请求,包括客户端向服务端发送的 Request 请求和服务器端发送的 Response ...
    99+
    2024-04-02
  • 浅谈PHP设计模式之对象池模式Pool
    目录目的UML 类图代码测试目的 在初始化实例成本高,实例化率高,可用实例不足的情况下,对象池可以极大地提升性能。在创建对象(尤其是通过网络)时间花销不确定的情况下,通过对象池在可期...
    99+
    2024-04-02
  • Python 面向对象介绍
    一、类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例 1 class People: 2 def __init__(self,name,age,sex): 3 self.na...
    99+
    2023-01-30
    面向对象 Python
  • JavaScript内置对象介绍
    目录一、内置对象二、Math对象1、Math对象的使用2、生成指定范围的随机数三、日期对象1、Date()方法的使用2、日期对象的使用3、获取时间戳四、数组对象1、数组对象的创建2、...
    99+
    2024-04-02
  • Java面向对象之类的继承介绍
    目录继承的作用如果没有继承机制是怎么样的?使用继承机制后的示例?类的继承是什么?子类和父类的继承机制Java单继承Java继承的顶级父类:Object对象的类型转换对象向上转型对象向...
    99+
    2024-04-02
  • java面向对象继承与多态介绍
    目录一.概述  二.继承2.1 继承的概述2.2 继承机制2.3 类中属性,方法的继承与覆盖2.4 super 关键字三. 多态总结一.概述 ...
    99+
    2024-04-02
  • Java ThreadPoolExecutor线程池有关介绍
    目录为什么要有线程池线程池状态ThreadPoolExecutor核心参数corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueuet...
    99+
    2024-04-02
  • Java对象的内存布局详细介绍
    目录一、对象头1)、Mark Word2)、类型指针3)、数组长度(只有数组对象才有)二、实例数据三、对齐填充四、使用JOL工具分析对象内存布局在HotSpot虚拟机中,对象在内存中...
    99+
    2023-02-13
    Java对象内存布局 Java内存布局 Java对象内存
  • ECMAscript新特性对象介绍
    目录1.对象的属性 1.1属性表示法 2.计算属性名 3.Object 的方法 3.1Object.is() 方法 3.2Object.assign()方法 4.super 关键字 ...
    99+
    2024-04-02
  • Vue中的event对象介绍
    一、什么是event对象 event对象:代表的是事件的状态。比如获取当前的元素:e.Target。 二、事件冒泡 什么是事件冒泡呢?百度百科的解释如下: 当事件发生后,这个事件就要...
    99+
    2024-04-02
  • 面向对象编程介绍
    目录 面向过程编程 面向对象编程 面向过程变成的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么…… 基于面向过程...
    99+
    2023-01-31
    面向对象
  • JavaScript对象不变性介绍
    目录1. 基本概念2. Object.freeze()3. Object.seal()4. const关键字?5. 总结1. 基本概念 对象不变性在任何编程语言中都是一个重要的概念。...
    99+
    2024-04-02
  • java对象池有哪些
    java中的对象池有:1.SoftReferenceObjectPool;2.StackObjectPool;3.GenericObjectPool;4.GenericKeyedObjectPool;java中的对象池有以下几种SoftRe...
    99+
    2024-04-02
  • .NET Core中对象池Object Pool的使用方法是什么
    这篇文章主要讲解了“.NET Core中对象池Object Pool的使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET Core中对象池Ob...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作