文档章节

对象池StackObjectPool使用

J
 J_Stone
发布于 2016/05/05 17:53
字数 231
阅读 51
收藏 2

// 构造函数, 不要被initIdleCapacity 误解,调用构造函数时,并没有放入对象。
// initIdleCapacity为对象池指定一个初始的参考大小(当空间不够时会自动增长)。但在源码中没看到有什么用途。
// maxIdle : 即 returnObject(), 可保存的对象数目的上限。达到这个上限之后,再向池里送回的对象会被自动送去回收。
//  initIdleCapacity 要大于 maxIdle

public StackObjectPool(PoolableObjectFactory<T> factory, int maxIdle, int initIdleCapacity) {
    this._pool = null;
    this._factory = null;
    this._maxSleeping = 8;
    this._numActive = 0;
    this._factory = factory;
    this._maxSleeping = maxIdle < 0?8:maxIdle;
    int initcapacity = initIdleCapacity < 1?4:initIdleCapacity;
    this._pool = new Stack();
    this._pool.ensureCapacity(initcapacity > this._maxSleeping?this._maxSleeping:initcapacity);
}
public synchronized T borrowObject() throws Exception {
    this.assertOpen();
    Object obj = null;
    boolean newlyCreated = false;

    while(null == obj) {
        if(!this._pool.empty()) { //如果堆栈中有对象,则弹出
            obj = this._pool.pop(); 
        } else { // 如果堆栈中没有对象
            if(null == this._factory) {
                throw new NoSuchElementException();
            }

            obj = this._factory.makeObject(); //创建对象
            newlyCreated = true;
            if(obj == null) {
                throw new NoSuchElementException("PoolableObjectFactory.makeObject() returned null.");
            }
        }
        。。。。
    }



© 著作权归作者所有

共有 人打赏支持
J
粉丝 2
博文 167
码字总数 30214
作品 0
朝阳
commons.pool2 对象池的使用

commons.pool2 对象池的使用 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.3</version></dependency> 池对象工厂 PooledObject......

秋风醉了
2015/03/25
0
2
Apache Commons 系列简介 之 Pool

一、概述 库提供了一整套用于实现对象池化的API,以及若干种各具特色的对象池实现。2.0版本,并非是对1.x的简单升级,而是一个完全重写的对象池的实现,显著的提升了性能和可伸缩性,并且包含...

无信不立
2016/12/29
0
0
Thrift RPC实战(四) common-pool2连接池

我们在服务器开发的过程中,往往会有一些对象,它的创建和初始化需要的时间比较长,比如数据库连接,网络IO,大数据对象等。在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可...

lemonLove
06/21
0
0
commons-pool2对象池使用

概念 对象池(ObjectPool): 掌管对象的生命周期,获取,激活,验证,钝化,销毁等 池对象(PooledObject): 被创建在池中的对象,自己可以有一些附加信息 池对象工厂(PooledObjectFactory): 池中...

Small-Liu
2016/01/21
1K
0
基于Apache-Commons-Pool2实现Grpc客户端连接池

概述 在项目运行过程中,有些操作对系统资源消耗较大,比如建立数据库连接、建立Redis连接等操作,我们希望一次性创建多个连接对象,并在以后需要使用时能直接使用已创建好的连接,达到提高性...

lilugoodjob
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
6
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部