Apache common-pool 學習和使用

common-pool 是一個對象池框架,使用非常簡單,應用非常普遍,值得大家學習。


要想使用common-pool ,我們只需要提供一個工廠類,用於爲“池”填充對象。如:


import org.apache.commons.pool.PoolableObjectFactory;

public class PooledObjectFactory implements PoolableObjectFactory {
	
	private static int index = 0;
	
	// 創建對象實例,用於填充對象池。同時可以分配這個對象適用的資源。
	public Object makeObject() throws Exception {
		Integer obj = new Integer(++index);
		System.out.println("創建對象實例:" + obj);
		return obj;
	}
	
	// 銷燬對象,銷燬對象池時被調用,連接池調用invalidateObject(obj);時被調用。
	public void destroyObject(Object obj) throws Exception {
		System.out.println("銷燬對象:" + obj);
	}
	
	// 查詢對象有效性,需要對象池設置setTestOnBorrow(true)
	public boolean validateObject(Object obj) {
		System.out.println("檢查對象有效性:" + obj);
		return true;
	}
	
	// 激活一個對象,從對象池獲取對象時被調用。
	public void activateObject(Object obj) throws Exception {
		System.out.println("激活對象:" + obj);
	}
	
	// 掛起一個對象,將對象還給對象池時被調用。
	public void passivateObject(Object obj) throws Exception {
		System.out.println("掛起對象:" + obj);
	}
	
}

寫完這個工廠之後我們就可以使用對象池了,如下:


		PooledObjectFactory factory = new PooledObjectFactory();//對象工廠
		GenericObjectPool pool = new GenericObjectPool(factory);//對象池
		pool.setTestOnBorrow(true);//設置是否在獲取對象時候檢查有效性
		Object obj = pool.borrowObject();//從池取出object,由factory負責提供
	    pool.returnObject(obj);//把取出的object還給對象池
        pool.close();//銷燬對象池,將調用對象工廠的銷燬方法


發佈了17 篇原創文章 · 獲贊 3 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章