# Package org.apache.commons.pool2

package org.apache.commons.pool2
Object pooling API.

The `org.apache.commons.pool2` 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:

`ObjectPool`
  defines a simple object pooling interface, with methods for borrowing instances from and returning them to the pool.
`PooledObjectFactory`
  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.

The `pool` package also provides a keyed pool interface, which pools instances of multiple types, accessed according to an arbitrary key. See `KeyedObjectPool` and `KeyedPooledObjectFactory`.

- Related Packages
  Package
  Description
  org.apache.commons.pool2.impl
  Object pooling API implementations.
  org.apache.commons.pool2.proxy
  Object pooling proxy implementations.
- Class
  Description
  BaseKeyedPooledObjectFactory<K,V>
  A base implementation of `KeyedPooledObjectFactory`.
  BaseObject
  A base class for common functionality.
  BaseObjectPool<T>
  A simple base implementation of `ObjectPool`.
  BasePooledObjectFactory<T>
  A base implementation of `PoolableObjectFactory`.
  DestroyMode
  Destroy context provided to object factories via `destroyObject` and `invalidateObject` methods.
  KeyedObjectPool<K,V>
  A "keyed" pooling interface.
  KeyedPooledObjectFactory<K,V>
  An interface defining life-cycle methods for instances to be served by a `KeyedObjectPool`.
  ObjectPool<T>
  A pooling simple interface.
  PooledObject<T>
  Defines the wrapper that is used to track the additional information, such as state, for the pooled objects.
  PooledObjectFactory<T>
  An interface defining life-cycle methods for instances to be served by an `ObjectPool`.
  PooledObjectState
  Provides all possible states of a `PooledObject`.
  PoolUtils
  This class consists exclusively of static methods that operate on or return ObjectPool or KeyedObjectPool related interfaces.
  SwallowedExceptionListener
  Pools that unavoidably swallow exceptions may be configured with an instance of this listener so the user may receive notification of when this happens.
  TrackedUse
  Allows pooled objects to make information available about when and how they were used available to the object pool.
  UsageTracking<T>
  This interface may be implemented by an object pool to enable clients (primarily those clients that wrap pools to provide pools with extended features) to provide additional information to the pool relating to object using allowing more informed decisions and reporting to be made regarding abandoned objects.