Java对象池

背景

通过这篇文章学习了Java对象池基本原理和应用场景,以及造了一个简单的轮子,可是楼主代码写的不可运行,因此自己完善了一下代码,并添加了测试用例
https://blog.csdn.net/shimiso/article/details/9814917。

简介

1.基本原理:
对象池技术基本原理的核心有两点:缓存和共享,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序重复使用,从而减少创建对象和释放对象的次数,进而改善应用程序的性能。

2.使用场景:
并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。
常见,如数据库连接池、Redis连接池

代码

import java.util.Enumeration;
import java.util.Vector;

public class ObjectPool {
   
    private int numObjects = 10; // 对象池的大小
    private int maxObjects = 50; // 对象池最大的大小
    private Vector objects = null; //存放对象池中对象的向量( PooledObject类型)

    public ObjectPool() {
   
    }

    /*** 创建一个对象池***/
    public synchronized void createPool() {
   
        // 确保对象池没有创建。如果创建了,保存对象的向量 objects 不会为空
        if (objects != null) {
   
            return; // 如果己经创建,则返回
        }

        // 创建保存对象的向量 , 初始时有 0 个元素
        objects = new Vector();

        // 根据 numObjects 中设置的值,循环创建指定数目的对象
        for (int x = 0; x < numObjects; x++) {
   
            if (this.objects.size() < this.maxObjects) {
   
                Object obj = new Object();
                objects.addElement(new PooledObject(obj));
            }
        }
    }

    public synchronized Object getObject() {
   
        // 确保对象池己被创建
        if (objects == null) {
   
            return null; // 对象池还没创建,则返回 null
        }
        Object conn = getFreeObject(); // 获得一个可用的对象

        // 如果目前没有可以使用的对象,即所有的对象都在使用中
        while (conn == null) {
   
            wait(250);
            conn = getFreeObject(); // 重新再试,直到获得可用的对象,如果
            // getFreeObject() 返回的为 null,则表明创建一批对象后也不可获得可用对象
        }

        return conn;// 返回获得的可用的对象
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值