1. 程式人生 > >Apache common-pool 學習和使用

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();//銷燬物件池,將呼叫物件工廠的銷燬方法