`

java对象池ObjectPool

阅读更多
commons-pool提供了一套很好用的对象池组件。使用也很简单,不过对一些简单的对象使用对象池就没必要了。

ObjectPool定义了一个简单的池化接口,有三个对应实现 
GenericObjectPool:实现了可配置的后进先出或先进先出(LIFO/FIFO)行为,默认是作为一个后进先出队列,这意味当对象池中有可用的空闲对象时,borrowObject 将返回最近的对象实例,如果将lifo 属性设置为false,则按FIFO行为返回对象实例。
StackObjectPool :实现了后进先出(LIFO)行为。
SoftReferenceObjectPool: 实现了后进先出(LIFO)行为。另外,对象池还在SoftReference 中保存了每个对象引用,允许垃圾收集器针对内存需要回收对象。

KeyedObjectPool定义了一个以任意的key访问对象的接口(可以池化对种对象),有两种对应实现。
GenericKeyedObjectPool :实现了先进先出(FIFO)行为。
StackKeyedObjectPool : 实现了后进先出(LIFO)行为。

PoolableObjectFactory 定义了池化对象的生命周期方法,我们可以使用它分离被池化的不同对象和管理对象的创建,持久,销毁。
BasePoolableObjectFactory这个实现PoolableObjectFactory 接口的一个抽象类,我们可用扩展它实现自己的池化工厂。

一个对象池使用的简单例子:
Java代码
package tf;  
 
import org.apache.commons.pool.BasePoolableObjectFactory;  
import org.apache.commons.pool.ObjectPool;  
import org.apache.commons.pool.impl.StackObjectPool;  
 
public class Pool {  
 
    public static void main(String[] args) throws Exception {  
        ObjectPool pool = new StackObjectPool(new UserFactory());  
        User u = (User) pool.borrowObject(); // 从池中借出一个对象  
        u.setName("me");  
        u.sayHello();  
        pool.returnObject(u); // 归还对象  
    }  
 
    static class UserFactory extends BasePoolableObjectFactory {  
        /** 
         * 产生一个新对象 
         */ 
        public Object makeObject() {  
            return new User();  
        }  
 
        /** 
         * 还原对象状态 
         */ 
        public void passivateObject(Object obj) {  
            User u = (User) obj;  
            u.clear();  
        }  
    }  
 
    static class User {  
        String name;  
 
        void setName(String name) {  
            this.name = name;  
        }  
 
        void sayHello() {  
            System.out.println("hello, " + name);  
        }  
 
        void clear() {  
            name = "";  
        }  
    }  

分享到:
评论

相关推荐

    Java对象池实现源码

    下面是一个简单的Java对象池实现,以`ObjectPool`类为例: ```java import java.util.ArrayList; import java.util.List; public class ObjectPool<T> { private List<T> pool; private ObjectFactory<T> ...

    关于java对象池的例子代码

    Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...

    ObjectPool:Android 对象池

    Android 对象池 谨慎和智能地使用系统资源对 Android 来说至关重要。 过度消耗堆内存会带来OutOfMemory异常和无数次遇到垃圾收集器(GC)。 GC会占用 UI 线程的宝贵时间,并且会导致丢弃 UI 帧,从而提供糟糕的用户...

    ObjectPool:通用对象池,可用于池任何类型的资源

    在Java编程中,对象池是一种优化技术,用于提高程序性能并减少系统资源的消耗。对象池的基本思想是预先创建...对于深入理解和使用Java对象池的开发者来说,"ObjectPool-master"这样的项目是一个很好的学习和实践平台。

    对象池

    这个压缩包包含三个文件:`ObjectPool.java`、`Test.java`和`TestObject.java`,分别代表了对象池的实现、测试类以及一个用于测试的对象类。 `ObjectPool.java` 文件很可能实现了对象池的基本逻辑。它可能包括以下...

    对象池&线程池&数据库连接池

    在Java中,`java.util.concurrent`包下的`ObjectPool`接口就是用于定义对象池的行为。通过对象池,可以避免频繁的实例化和垃圾回收,提高程序运行速度。例如,JDBC的`Statement`和`PreparedStatement`对象池,可以...

    java对象池化技术[参照].pdf

    开发者可以通过实现PoolableObjectFactory和利用ObjectPool接口,结合ObjectPoolFactory来创建定制的对象池,以提高系统性能并减少资源消耗。在实际应用中,需要根据对象的特性和系统需求来决定是否采用对象池化技术...

    java对象池化技术

    用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称 Pool)。 对象池化的优缺 对象池化技术可以减少对象生成和初始化时的消耗,提高系统的运行效率。但是,并非所有对象都适合拿来池化――...

    举例讲解Java设计模式中的对象池模式编程

    在上述代码示例中,`ObjectPool` 类实现了对象池的基本结构: - **Stack**:使用Java的Stack类作为对象池,它是一个基于链表的后进先出(LIFO)数据结构,非常适合用于对象池,因为获取和归还对象的操作都与栈操作...

    ObjectPool_v1.0

    在`src`目录中,源代码可能包含了实现对象池的类和相关方法,例如`ObjectPool.java`,`ObjectFactory.java`等。开发者可以查看这些源码以理解其实现细节,例如如何维护对象池、如何实现对象的分配与回收,以及如何...

    java设计模式之实现对象池模式示例分享

    对象池模式是一种设计模式,它在Java编程中用于管理和重用昂贵资源,如数据库连接、线程或网络套接字,以减少系统性能开销。当频繁创建和销毁这些资源时,对象池模式能显著提高效率。在描述的示例中,我们看到一个...

    ObjectPool_v1.1.zip

    例如,Java中的数据库连接池就是对象池的一个典型应用,它减少了创建和关闭数据库连接的次数,提升了系统的运行效率。 `license.txt` 文件通常包含软件的许可协议,规定了该代码库的使用、分发和修改的法律条件。在...

    DesignPattern-Creational-ObjectPool:设计模式-创新-对象池

    因此,从池中删除对象时,在将对象放回之前,该对象在池中不可用。 组对象具有生命周期: 创建验证销毁。 顺序图 优势 提供显着的性能提升。 管理您的连接,并提供一种重用和共享它们的方式。 当类的实例的初始化...

    mydotey-objectpool

    MyDotey对象池 MyDotey ObjectPool,一个通用的对象池,基于ConcurrentHashMap&BlockingQueue的实现,易于使用。 分别在java / dotnet中实现。 代码是干净的。 易于阅读。 ThreadPool和AutoScaleThreadPool也是基于...

    Java FTPClient连接池的实现

    Apache的common-pool工具包提供了开发通用对象池的一些接口和实现类,其中最基本的两个接口是ObjectPool和PoolableObjectFactory。ObjectPool接口中有几个最基本的方法: 1. addObject() : 添加对象到池 2. ...

    commons-pool-current.rar

    Apache Commons Pool 是一个Java对象池库,主要用于管理资源,尤其是短生命周期的对象,通过对象池化技术提高性能和效率。在Java应用中,频繁创建和销毁对象会消耗大量系统资源,对象池可以重用已创建的对象,减少新...

    commons-pool-1.2.jar.zip

    Apache Commons Pool 1.2 作为Java对象池的基石,为开发者提供了强大的工具来优化资源管理。通过合理使用对象池,我们可以显著降低系统开销,提升程序运行效率。然而,需要注意的是,不当的对象池配置可能会导致资源...

    commons-pool2-2.4.2-bin.zip

    Apache Commons Pool2是一个Java对象池库,用于管理资源,如数据库连接、线程或任何可重用的对象。这个"commons-pool2-2.4.2-bin.zip"压缩包包含了Pool2库的二进制版本,版本号为2.4.2。在Java应用程序中,对象池...

    demo-commons-pool:对象池框架

    Apache Commons Pool是Java领域中广泛使用的一个对象池实现库,它提供了灵活、高效的对象池服务。本文将深入探讨对象池的概念,以及Apache Commons Pool的使用方法和核心特性。 一、对象池基础理论 对象池的基本...

    commons-pool-1.6-bin

    Apache Commons Pool 是一个Java对象池库,主要用于管理可重用对象。这个"commons-pool-1.6-bin"是Apache Commons Pool的1.6版本的二进制发行版,包含了库文件和其他运行时所需的资源。在Java开发中,对象池是一种...

Global site tag (gtag.js) - Google Analytics