Apache common-pool 學習和使用
阿新 • • 發佈:2019-02-13
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();//銷燬物件池,將呼叫物件工廠的銷燬方法