Java物件池示例

2021-06-29 16:42:31 字數 2570 閱讀 2365

物件池使用的基本思路是:將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用,從而在一定程度上減少頻繁建立物件所造成的開銷。 並非所有物件都適合拿來池化――因為維護物件池也要造成一定開銷。對生成時開銷不大的物件進行池化,反而可能會出現「維護物件池的開銷」大於「生成新物件的開銷」,從而使效能降低的情況。但是對於生成時開銷可觀的物件,池化技術就是提高效能的有效策略了。下面是構建物件池的乙個例子:

public

class objectpool

/*** 建立乙個物件池**

*/public

synchronized

void createpool()

//建立儲存物件的向量 , 初始時有 0 個元素

objects = new vector();

//根據 numobjects 中設定的值,迴圈建立指定數目的物件

for (int x = 0; x < numobjects; x++)

}}

public

synchronized object getobject()

object conn = getfreeobject(); //

獲得乙個可用的物件

//如果目前沒有可以使用的物件,即所有的物件都在使用中

while (conn == null)

return conn;//

返回獲得的可用的物件

}

/*** 本函式從物件池物件 objects 中返回乙個可用的的物件,如果

* 當前沒有可用的物件,則建立幾個物件,並放入物件池中。

* 如果建立後,所有的物件都在使用中,則返回 null

*/private object getfreeobject()

}

return obj;

}

/*** 查詢物件池中所有的物件,查詢乙個可用的物件,

* 如果沒有可用的物件,返回 null

*/private object findfreeobject()

return obj;//

返回找到到的可用物件

}

/*** 此函式返回乙個物件到物件池中,並把此物件置為空閒。

* 所有使用物件池獲得的物件均應在不使用此物件時返回它。

*/public

void returnobject(object obj)

pooledobject pobj = null;

enumeration enumerate = objects.elements();

//遍歷物件池中的所有物件,找到這個要返回的物件物件

while (enumerate.hasmoreelements())

}

}

/*** 關閉物件池中所有的物件,並清空物件池。

*/public

synchronized

void closeobjectpool()

pooledobject pobj = null;

enumeration enumerate = objects.elements();

while (enumerate.hasmoreelements())

//從物件池向量中刪除它

objects.removeelement(pobj);

}

//置物件池為空

objects = null;

}

/*** 使程式等待給定的毫秒數

*/private

void wait(int mseconds)

catch (interruptedexception e)

}

/*** 內部使用的用於儲存物件池中物件的類。

* 此類中有兩個成員,乙個是物件,另乙個是指示此物件是否正在使用的標誌 。

*/class pooledobject

//返回此物件中的物件

public object getobject()

//設定此物件的,物件

public

void setobject(object objection)

//獲得物件物件是否忙

public

boolean isbusy()

//設定物件的物件正在忙

public

void setbusy(boolean busy)

}

}

測試類:

**如下:

public

class objectpooltest

}

Java物件池示例

物件池使用的基本思路是 將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用,從而在一定程度上減少頻繁建立物件所造成的開銷。並非所有物件都適合拿來池化 因為維護物件池也要造成一定開銷。對生成時開銷不大的物件進行池化,反而可能會出現 維護物件池的開銷 大於 生成新物件的開銷 從而使效能降...

java 通用物件池的實現

本文以apache common pools為例 pooledobject 可被池化的物件 預設實現defaultpooledobject,裡面封裝了乙個真正的使用者需要池化的物件object。其中defaultpooledobject裡面有兩個方法 exception borrowedby 用於記...

記憶體池實現示例

1.模板類定義 使用了模板以適應不同物件的記憶體需求,記憶體池中的記憶體塊則是以基於鍊錶的結構進行組織 static void operator delete void dp private static void memalloc cur 0 qdebug memalloc static unsi...