1
我想了解一個飛錘設計模式有效地用於創建共享對象池。這個需求來自於Java EE基於web的應用程序的性能改進清單。Flyweight設計模式來創建共享對象池
對於經常使用的複雜對象,我考慮一個可回收對象池,而不是總是實例化新對象。
現在請讓我怎麼輕量級設計模式可用於創建的寶貴的系統資源像 池 - 線程 - 數據庫連接 - 套接字連接等
我想了解一個飛錘設計模式有效地用於創建共享對象池。這個需求來自於Java EE基於web的應用程序的性能改進清單。Flyweight設計模式來創建共享對象池
對於經常使用的複雜對象,我考慮一個可回收對象池,而不是總是實例化新對象。
現在請讓我怎麼輕量級設計模式可用於創建的寶貴的系統資源像 池 - 線程 - 數據庫連接 - 套接字連接等
對於資源池,你需要:
aquire-release部分可以使用Semaphore
實現,其中池大小是Semaphore上的許可數。如果你遵循the link to the JavaDoc中,不過已經這樣一個池的例子:
(代碼JavaDoc)
class Pool {
private static final int MAX_AVAILABLE = 100;
private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
public Object getItem() throws InterruptedException {
available.acquire();
return getNextAvailableItem();
}
public void putItem(Object x) {
if (markAsUnused(x))
available.release();
}
// Not a particularly efficient data structure; just for demo
protected Object[] items = ... whatever kinds of items being managed
protected boolean[] used = new boolean[MAX_AVAILABLE];
protected synchronized Object getNextAvailableItem() {
for (int i = 0; i < MAX_AVAILABLE; ++i) {
if (!used[i]) {
used[i] = true;
return items[i];
}
}
return null; // not reached
}
protected synchronized boolean markAsUnused(Object item) {
for (int i = 0; i < MAX_AVAILABLE; ++i) {
if (item == items[i]) {
if (used[i]) {
used[i] = false;
return true;
} else
return false;
}
}
return false;
}
}
很好的例子彼得,謝謝 –