java开源对象池_JAVA 对象池

GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象。这种对象池的特色是:

可以设定最多能从池中借出多少个对象。

可以设定池中最多能保存多少个对象。

可以设定在池中已无对象可借的情况下,调用它的borrowObject方法时的行为,是等待、创建新的实例还是抛出异常。

可以分别设定对象借出和还回时,是否进行有效性检查。

可以设定是否使用一个单独的线程,对池内对象进行后台清理。

GenericObjectPool的构造方法共有七个,其中:

最简单的一个是GenericObjectPool(PoolableObjectFactory factory)。仅仅指明要用的PoolableObjectFactory实例,其它参数则采用默认值。

最复杂的一个是GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn,longtimeBetweenEvictionRunsMillis,intnumTestsPerEvictionRun,longminEvictableIdleTimeMillis,booleantestWhileIdle)。其中:

参数factory指明要与之配合使用的PoolableObjectFactory实例。

参数maxActive指明能从池中借出的对象的最大数目。如果这个值不是正数,表示没有限制。

参数whenExhaustedAction指定在池中借出对象的数目已达极限的情况下,调用它的borrowObject方法时的行为。可以选用的值有:

GenericObjectPool.WHEN_EXHAUSTED_BLOCK,表示等待;

GenericObjectPool.WHEN_EXHAUSTED_GROW,表示创建新的实例(不过这就使maxActive参数失去了意义);

GenericObjectPool.WHEN_EXHAUSTED_FAIL,表示抛出一个java.util.NoSuchElementException异常。

参数maxWait指明若在对象池空时调用borrowObject方法的行为被设定成等待,最多等待多少毫秒。如果等待时间超过了这个数值,则会抛出一个java.util.NoSuchElementException异常。如果这个值不是正数,表示无限期等待。

参数testOnBorrow设定在借出对象时是否进行有效性检查。

参数testOnBorrow设定在还回对象时是否进行有效性检查。

参数timeBetweenEvictionRunsMillis,设定间隔每过多少毫秒进行一次后台对象清理的行动。如果这个值不是正数,则实际上不会进行后台对象清理。

参数numTestsPerEvictionRun,设定在进行后台对象清理时,每次检查几个对象。如果这个值不是正数,则每次检查的对象数是检查时池内对象的总数乘以这个值的负倒数再向上取整的结果――也就是说,如果这个值是-2(-3、-4、-5……)的话,那么每次大约检查当时池内对象总数的1/2(1/3、1/4、1/5……)左右。

参数minEvictableIdleTimeMillis,设定在进行后台对象清理时,视休眠时间超过了多少毫秒的对象为过期。过期的对象将被回收。如果这个值不是正数,那么对休眠时间没有特别的约束。

参数testWhileIdle,则设定在进行后台对象清理时,是否还对没有过期的池内对象进行有效性检查。不能通过有效性检查的对象也将被回收。

另一个比较特别的构造方法是GenericObjectPool(PoolableObjectFactory factory, GenericObjectPool.Config config) 。其中:

参数factory指明要与之配合使用的PoolableObjectFactory实例;

参数config则指明一个包括了各个参数的预设值的对象(详见《GenericObjectPool.Config》一节)。

剩下的五个构造函数则是最复杂的构造方法在某方面的简化版本,可以根据情况选用。它们是:

GenericObjectPool(PoolableObjectFactory factory,intmaxActive)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,booleantestOnBorrow,booleantestOnReturn)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn)

这种对象池不可以在没有Jakarta Commmons Collections组件支持的情况下运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新一代人工智能专利分析

来源:三思派人工智能(Artificial Intelligence,AI)自诞生以来,已经过约60年的发展。2006年深度学习算法的重大突破带来了人工智能的第三次爆发。同时也引发专利申请的激增,2006年至2016年,十年的…

MYSQL性能优化详解(二)

接着上一篇学习:http://www.cnblogs.com/quanzhiguo/p/6401453.html 七、MySQL数据库Schema设计的性能优化 高效的模型设计 适度冗余-让Query尽两减少Join 大字段垂直分拆-summary表优化 大表水平分拆-基于类型的分拆优化 统计表-准实时优化 合适的数据类型 时间存储…

python if else用法同一行_在Python的同一行中使用if else for和del吗?-问答-阿里云开发者社区-阿里云...

我有一个列表,其项目是可变长度的列表。如果这些可变长度的列表项超过此长度,则需要将其截断为特定长度(x)。我做了这个小的功能。def truncateList(batch_, trim_len):truncated_list []for eachAbstract in train_abstracts_encoded:if len(eachAbstr…

java no resultset_jdbc - Java ResultSet如何检查是否有任何结果

jdbc - Java ResultSet如何检查是否有任何结果结果集没有hasNext的方法。 我想检查resultSet是否有任何值这是正确的方法if (!resultSet.next() ) {System.out.println("no data");}kal asked 2019-02-19T19:16:57Z21个解决方案472 votes假设您正在使用新返回的Resul…

图解谷歌大脑丶城市大脑丶全球脑与互联网大脑的关系

人类很早就朦胧的发现社会组织具有神经系统的特征。19世纪到20世纪,一些前瞻的哲学家们开始不断将科技与脑进行了关联,提出了"器官映射","社会神经网络","全球脑"。 21世纪之后,更多科技大脑概念不断涌现,从互联网大脑到城市大脑,从谷…

Ubuntu 安装调整工具移动 Launcher 启动器位置

问题:如何将 Ubuntu 16.04 屏幕左侧的 Launcher 启动器由屏幕底部移动到屏幕左侧。 Ubuntu 16.04 最新的 unity-tweak-tool 工具,已经为用户提供了通过图形界面,实现上述 Launcher 启动器位置移动的功能。 1、在终端中执行: sudo …

python求助神器_python三大神器

Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric1. pip 用来包管理1 #安装,可指定版本号2 (sudo) pip install Django1.6.834 #升级5 (sudo) pip install bpython --upgrade67 #一次安装多个8 (sudo) pip install BeautifulSoup4 fabri…

滴滴自动驾驶CEO张博:十年内无人驾驶对消费者没有吸引力丨厚势汽车

来源:WAVE2019张博:在 2012 年滴滴创立的时候,我们是一个非常简单的想法。我们发现在打出租车的场景下,无论是司机还是乘客效率都非常低。在滴滴出现之前,一个乘客想要打出租车必须要下楼招一下手,这个信号…

garch预测 python_数据科学方面的Python库,实用!

作者:Python开发与大数据人工智能原文:公众号 Python开发与大数据人工智能Python是一种很棒的编程语言。事实上,它还是世界上发展最快的编程语言之一。它一次又一次证明了它在数据科学职位中的实用性。整个Python及其库的生态系统使其成为全世…

纯js实现html转pdf

项目开发中遇到了一个变态需求,需要把一整个页面导出为pdf格式,而且要保留页面上的所有的表格、svg图片和样式。 简而言之,就是希望像截图一样,把整个页面截下来,然后保存成pdf。 咋不上天呢…… 查了一下,…

java 判断是linux系统_java判断是window系统还是Linux系统,并获取其IP地址及文件上传 | 学步园...

这是upload类的方法:public class Upload {public static String upload(FormFile formfile,String dirPath,int port){String savePath"";String ip"";try{String filename formfile.getFileName().trim(); // 文件名if (!"".equal…

物联网中的推荐系统

来源:北京物联网智能技术应用协会作者 | Alexander Felfernig, Seda Polat Erdeniz编译 | CDA数据科学研究院Recommender systems in the Internet of Things1、背景介绍物联网是一种联网的基础架构,是物联网、互联网和语义学领域之间融合的结果&#xf…

pwm控制的基本原理_单片机PWM控制基本原理详解~

PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信号的效果。这是个什么概念呢?我们一步步来介绍。首…

关上Deepfake的潘多拉魔盒,RealAI推出深度伪造视频检测工具

诞生之初,Deepfake是一项有趣的图像处理技术,仅仅带来搞笑和娱乐视频,但殊不知,潘多拉魔盒就此被打开,催生出色情黑产、恶搞政客“操纵”民意,Deepfake正逐步进化为一种新型“病毒”,人类伦理道…

java 解析 csv_在Java中将数据从CSV解析到数组

我正在尝试将CS​​V文件导入到可以在Java程序中使用的数组中. CSV文件已成功导入自身,输出显示在终端上,但它会引发错误:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1at CompareCSV.main(CompareCSV.java:19)在末尾.另外,当…

python画国际象棋_python图形工具turtle绘制国际象棋棋盘

本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下#编写程序绘制一个国际象棋的棋盘import turtleturtle.speed(30)turtle.penup()off Truefor y in range(-40, 30 1, 10):for x in range(-40, 30 1, 10)…

谷歌地图的全球森林监察系统,揭秘中国雾霾的惊天秘密!

来源:老牛时评谷歌公司最近推出的全新交互式地图——“全球森林监察”它可以实时显示全球森林的覆盖情况。该幅地图的数据来源有多个,其中包括了NASA的森林面积覆盖率的分析数据。于是我们选取了中国及中国周边的部分,看完后的感受只能是比悲…

dbref java_查询mongodb dbref内部字段

我需要隐藏其isActive标志设置为false的所有用户相关数据 . 有许多集合我使用了DBRef类型的用户集合(大约14个集合),每个集合包含超过1000万条记录 .让我借助例子更恰当地解释一下 .假设我有两个集合:用户联系用户集包含以下字段:名字(字符串…

qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件

一、前言这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式…

web.xml文件头出错

原先将web.xml文件头设置为如下格式 <?xml version"1.0" encoding"UTF-8"?><web-app version"3.1" xmlns"http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:sche…