前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天20分钟对象池的使用

每天20分钟对象池的使用

原创
作者头像
李子健
发布2023-05-29 22:20:24
1130
发布2023-05-29 22:20:24
举报
文章被收录于专栏:每日一善每日一善

概述

对象的生命周期:创建,使用,销毁。

对象池的作用,对象复用,避免创建新对象,节省资源,特别是对于数据库连接,网络连接这种耗时的操作。

常用的功能

  • 对象包裹
    • 对象的基本属性
    • 是否被使用
  • 对象管理
    • 对象的初始化等基本操作
    • 对象的销毁
    • 对象存储的容器
    • 维护对象的个数和生命周期

commons-pool2的使用

幸运的是在java里面,已经有很好的库可以直接使用commons-pool2

<dependency>

代码语言:txt
复制
<groupId>org.apache.commons</groupId>
代码语言:txt
复制
<artifactId>commons-pool2</artifactId>
代码语言:txt
复制
<version>${commons-pool2.version}</version>

</dependency>

资源对象

@ToString

@Data

public class DbConnect {

代码语言:txt
复制
private Integer id;
代码语言:txt
复制
private String info;

}

资源对象工厂

public class DbConnectFactory extends BasePooledObjectFactory<DbConnect> {

代码语言:txt
复制
@Override
代码语言:txt
复制
public DbConnect create() throws Exception {
代码语言:txt
复制
    return new DbConnect();
代码语言:txt
复制
}
代码语言:txt
复制
@Override
代码语言:txt
复制
public PooledObject<DbConnect> wrap(DbConnect obj) {
代码语言:txt
复制
    return new DefaultPooledObject<DbConnect>(obj);
代码语言:txt
复制
}

}

使用

package cn.beckbi.ex.objectpool;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.pool2.PooledObjectFactory;

import org.apache.commons.pool2.impl.GenericObjectPool;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**

  • @program: wj
  • @description:
  • @author: bikang
  • @create: 2023-05-28 20:31 */ @Slf4j public class ObjectPoolX {
代码语言:txt
复制
public static void main(String[] args) throws Exception{
代码语言:txt
复制
    PooledObjectFactory<DbConnect> factory = new DbConnectFactory();
代码语言:txt
复制
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
代码语言:txt
复制
    poolConfig.setMaxIdle(5);
代码语言:txt
复制
    poolConfig.setMinIdle(1);
代码语言:txt
复制
    poolConfig.setMaxTotal(20);
代码语言:txt
复制
    poolConfig.setTestOnBorrow(true);
代码语言:txt
复制
    poolConfig.setTestOnReturn(false);
代码语言:txt
复制
    poolConfig.setTestWhileIdle(false);
代码语言:txt
复制
    poolConfig.setLifo(true);
代码语言:txt
复制
    poolConfig.setBlockWhenExhausted(true);
代码语言:txt
复制
    poolConfig.setNumTestsPerEvictionRun(3);
代码语言:txt
复制
    final GenericObjectPool<DbConnect> pool = new GenericObjectPool<DbConnect>(factory, poolConfig);
代码语言:txt
复制
    for (int j=1;j < 10 ;j ++) {
代码语言:txt
复制
        new Thread(() ->{
代码语言:txt
复制
            for (int i =0; i < 100; i++) {
代码语言:txt
复制
                try {
代码语言:txt
复制
                    DbConnect dbConnect = pool.borrowObject();
代码语言:txt
复制
                    if (null == dbConnect.getId()) {
代码语言:txt
复制
                        dbConnect.setId(i);
代码语言:txt
复制
                        dbConnect.setInfo("id:"+i);
代码语言:txt
复制
                    }
代码语言:txt
复制
                    System.out.println(dbConnect);
代码语言:txt
复制
                }catch (Exception e) {
代码语言:txt
复制
                    log.error("connect error", e);
代码语言:txt
复制
                }
代码语言:txt
复制
            }
代码语言:txt
复制
        }).start();
代码语言:txt
复制
    }
代码语言:txt
复制
}

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 常用的功能
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档