package com.knowledgetree.openoffice; import java.util.Stack; public abstract class ResourcePool { String name; Stack availableResources, busyResources; public ResourcePool(String name) { this.name = name; availableResources = new Stack(); busyResources = new Stack(); } protected abstract Object createNewResource(); public synchronized Object getResource() { Object result = null; if (availableResources.empty()) { result = createNewResource(); } else result = availableResources.pop(); if (result != null) busyResources.push(result); return result; } public synchronized void releaseResource(Object resource) { if (resource != null) if (busyResources.remove(resource)) availableResources.push(resource); } }