Object pooling API.

The com.frameworkset.commons.pool package defines a simple interface for a pool of object instances, and a handful of base classes that may be useful when creating pool implementations.

The pool package itself doesn't define a specific object pooling implementation, but rather a contract that implementations may support in order to be fully interchangeable.

The pool package separates the way in which instances are pooled from the way in which they are created, resulting in a pair of interfaces:

{@link com.frameworkset.commons.pool.ObjectPool ObjectPool}
defines a simple object pooling interface, with methods for borrowing instances from and returning them to the pool.
{@link com.frameworkset.commons.pool.PoolableObjectFactory PoolableObjectFactory}
defines lifecycle methods for object instances contained within a pool. By associating a factory with a pool, the pool can create new object instances as needed.

{@link com.frameworkset.commons.pool.ObjectPoolFactory ObjectPoolFactory} defines a simple factory for ObjectPools, which may be useful for some applications.

The pool package also provides a keyed pool interface, which pools instances of multiple types, accessed according to an arbitrary key. See {@link com.frameworkset.commons.pool.KeyedObjectPool KeyedObjectPool}, {@link com.frameworkset.commons.pool.KeyedPoolableObjectFactory KeyedPoolableObjectFactory}, and {@link com.frameworkset.commons.pool.KeyedObjectPoolFactory KeyedObjectPoolFactory}.