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组件支持的情况下运行。

java开源对象池_JAVA 对象池相关推荐

  1. java callable 线程池_JAVA 线程池之Callable返回结果

    本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...

  2. java 10个线程_Java线程池创建10个线程

    Q1:在Java并发编程中,如何扩展和优化线程池? 在java中多线程并不陌生,在一定的范围内,多线程数量的增加会明显提升整个系统的吞吐性能,但是线程本身会极大的耗费内存空间,线程的频繁创建和回收也极 ...

  3. java线程池_Java 线程池 8 大拒绝策略,面试必问!

    点击上方 Java后端,选择设为星标 技术博文,及时送达 前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的 ...

  4. java对象赋值_Java 对象不使用时为什么要赋值为 null?

    前言 许多Java开发者都曾听说过"不使用的对象应手动赋值为null"这句话,而且好多开发者一直信奉着这句话:问其原因,大都是回答"有利于GC更早回收内存,减少内存占用& ...

  5. java线程不执行_java线程池,阿里为什么不允许使用Executors?

    带着问题 阿里Java代码规范为什么不允许使用Executors快速创建线程池? 下面的代码输出是什么? ThreadPoolExecutor executor = new ThreadPoolExe ...

  6. java 对象复活_Java对象复活

    java 对象复活 总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理. 如果您复活了物体,会发生什么? 何时定案? fi ...

  7. java 如何实现对象克隆_Java对象克隆

    Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制对象的内容.要支持克隆操作,请在类中实现clone()方法.Object类中的clone()方法的声明如下: protected Obj ...

  8. java中对象类型转换_Java 对象类型的转换

    对象类型的转换在Java编程中经常遇到,主要分为向上转型和向下转型,但一定要记住,无论是向上转型还是向下转型,两个类之间必须有继承关系.先来看看基本概念. 向上转型又被称作自动类型转换,就是子类引用的 ...

  9. java list对象排序_Java 对象集合List排序的5种方式

    目标明确 排序对象类 public class Student{ private String name; private Integer age; public Student(String nam ...

最新文章

  1. mysql 高级语法,SQL 语法高级
  2. 【机器视觉】 dev_open_window算子
  3. WebLogic域的创建与发布
  4. Android 帧动画 xml 方式实现
  5. [转]ubuntu使用meld/beyond compare 做git的diff工具
  6. 一起来学Masonry (一)
  7. 本人教你五分钟学会五笔(不服找我)
  8. 【调研】DRL优化网络通信领域顶会及期刊
  9. php 自定义生成短链工具
  10. Web项目之服务器、客户端存储
  11. matlab hdf5,无法使用最新的HDF5打开matlab文件
  12. oracle 输出全角空格,mac系统中如何切换全角半角?苹果电脑输入法全角半角切换快捷键介绍...
  13. 关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理
  14. IT学习的网站和工具
  15. 剑指offer_递归与循环---跳台阶
  16. 云计算、大数据和人工智能
  17. 元宇宙:未来or骗局?
  18. github.global.ssl.fastly.net hosts
  19. pythons_pythons是什么意思_pythons怎么读_pythons翻译_用法_发音_词组_同反义词_巨蛇_大蟒( python的名词复数 )-新东方在线英语词典...
  20. windows安装.Net Framework3.5无法安装问题

热门文章

  1. ifix的MySQL数据库_iFIX 技术文章:iFIX历史数据库
  2. .git文件夹_Git幸存者指南
  3. python2转python3代码_2to3 – 自动Python 2到3代码翻译 – 开发工具(Python教程)(参考资料)...
  4. java 悬浮提示框_表格(悬浮框提示)
  5. 6.MongoDB备份与恢复
  6. python 强制结束线程_在python中实现强制关闭线程的示例
  7. 李宏毅机器学习(八)自编码器(Auto-encoder)
  8. NLP史上最全预训练模型汇总
  9. 论文浅尝 | 用于开放领域的问题生成
  10. 关于PaddleNLP如何加载训练好的模型进行NER