jakarta pool demo

在Pool2组件中,主要的两个类

  • PooledObjectFactory用于管理被池化的对象的产生、激活、挂起、校验和销毁;
  • ObjectPool用于管理要被池化的对象的借出和归还,并通知PooledObjectFactory完成相应的工作;
package com.cdw.pool;

import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;

public class StringBufferFactory extends BasePooledObjectFactory<StringBuffer>{

	@Override
	public StringBuffer create() throws Exception {
		return new StringBuffer();
	}
	  /**
     * Use the default PooledObject implementation.
     */
	@Override
	public PooledObject<StringBuffer> wrap(StringBuffer buffer) {
		return new DefaultPooledObject<StringBuffer>(buffer);	
	}
	/**
     * When an object is returned to the pool, clear the buffer.
     */
    @Override
    public void passivateObject(PooledObject<StringBuffer> pooledObject) {
        pooledObject.getObject().setLength(0);
    }
	
}
package com.cdw.pool;

import java.io.IOException;
import java.io.Reader;

import org.apache.commons.pool2.ObjectPool;

public class ReaderUtil {
	 private ObjectPool<StringBuffer> pool;
	    
	    public ReaderUtil(ObjectPool<StringBuffer> pool) {
	        this.pool = pool;
	    }

	    /**
	     * Dumps the contents of the {@link Reader} to a String, closing the {@link Reader} when done.
	     */
	    public String readToString(Reader in)
	        throws IOException {
	        StringBuffer buf = null;
	        try {
	            buf = pool.borrowObject();
	            for (int c = in.read(); c != -1; c = in.read()) {
	                buf.append((char) c);
	            }
	            return buf.toString();
	        } catch (IOException e) {
	            throw e;
	        } catch (Exception e) {
	            throw new RuntimeException("Unable to borrow buffer from pool" + e.toString());
	        } finally {
	            try {
	                in.close();
	            } catch (Exception e) {
	                // ignored
	            }
	            try {
	                if (null != buf) {
	                    pool.returnObject(buf);
	                }
	            } catch (Exception e) {
	                // ignored
	            }
	        }
	    }
}



package com.cdw.pool;

import java.io.File;
import java.io.FileReader;

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

public class Test {
	public static void main(String[] args) throws Exception {
		//1:创立pooledObjectFactory
		PooledObjectFactory<StringBuffer> sbFactory = new StringBufferFactory();
		//2:创立ObjectPool
		ObjectPool<StringBuffer> bjPool = new GenericObjectPool<StringBuffer>(sbFactory);
		ReaderUtil readerUtil = new ReaderUtil(bjPool);
		String s = readerUtil.readToString(new FileReader(new File("dbcp.properties")));
		System.out.println(s);
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值