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 = "";  
        }  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值