Class Pool<T>

java.lang.Object
org.eclipse.jetty.util.Pool<T>
Type Parameters:
T - the type of the pooled objects
All Implemented Interfaces:
AutoCloseable, Dumpable

@ManagedObject public class Pool<T> extends Object implements AutoCloseable, Dumpable

A pool of objects, with optional support for multiplexing, max usage count and several optimized strategies plus an optional ThreadLocal cache of the last release entry.

When the method close() is called, all Closeables object pooled by the pool are also closed.

  • Constructor Details

    • Pool

      public Pool(Pool.StrategyType strategyType, int maxEntries)
      Construct a Pool with a specified lookup strategy and no ThreadLocal cache.
      Parameters:
      strategyType - The strategy to used for looking up entries.
      maxEntries - the maximum amount of entries that the pool will accept.
    • Pool

      public Pool(Pool.StrategyType strategyType, int maxEntries, boolean cache)
      Construct a Pool with the specified thread-local cache size and an optional ThreadLocal cache.
      Parameters:
      strategyType - The strategy to used for looking up entries.
      maxEntries - the maximum amount of entries that the pool will accept.
      cache - True if a ThreadLocal cache should be used to try the most recently released entry.
  • Method Details

    • getReservedCount

      @ManagedAttribute("The number of reserved entries") public int getReservedCount()
      Returns:
      the number of reserved entries
    • getIdleCount

      @ManagedAttribute("The number of idle entries") public int getIdleCount()
      Returns:
      the number of idle entries
    • getInUseCount

      @ManagedAttribute("The number of in-use entries") public int getInUseCount()
      Returns:
      the number of in-use entries
    • getClosedCount

      @ManagedAttribute("The number of closed entries") public int getClosedCount()
      Returns:
      the number of closed entries
    • getMaxEntries

      @ManagedAttribute("The maximum number of entries") public int getMaxEntries()
      Returns:
      the maximum number of entries
    • getMaxMultiplex

      @ManagedAttribute("The default maximum multiplex count of entries") @Deprecated public int getMaxMultiplex()
      Deprecated.
      Multiplex functionalities will be removed
      Returns:
      the default maximum multiplex count of entries
    • getMaxMultiplex

      @Deprecated protected int getMaxMultiplex(T pooled)
      Deprecated.
      Multiplex functionalities will be removed

      Retrieves the max multiplex count for the given pooled object.

      Parameters:
      pooled - the pooled object
      Returns:
      the max multiplex count for the given pooled object
    • setMaxMultiplex

      @Deprecated public final void setMaxMultiplex(int maxMultiplex)
      Deprecated.
      Multiplex functionalities will be removed

      Sets the default maximum multiplex count for the Pool's entries.

      Parameters:
      maxMultiplex - the default maximum multiplex count of entries
    • getMaxUsageCount

      @ManagedAttribute("The default maximum usage count of entries") @Deprecated public int getMaxUsageCount()
      Deprecated.
      MaxUsage functionalities will be removed

      Returns the maximum number of times the entries of the pool can be acquired.

      Returns:
      the default maximum usage count of entries
    • getMaxUsageCount

      @Deprecated protected int getMaxUsageCount(T pooled)
      Deprecated.
      MaxUsage functionalities will be removed

      Retrieves the max usage count for the given pooled object.

      Parameters:
      pooled - the pooled object
      Returns:
      the max usage count for the given pooled object
    • setMaxUsageCount

      @Deprecated public final void setMaxUsageCount(int maxUsageCount)
      Deprecated.
      MaxUsage functionalities will be removed

      Sets the maximum usage count for the Pool's entries.

      All existing idle entries that have a usage count larger than this new value are removed from the Pool and closed.

      Parameters:
      maxUsageCount - the default maximum usage count of entries
    • reserve

      @Deprecated public Pool<T>.Entry reserve(int allotment)
      Deprecated.
      Use reserve() instead

      Creates a new disabled slot into the pool.

      The returned entry must ultimately have the Pool.Entry.enable(Object, boolean) method called or be removed via Pool.Entry.remove() or remove(Pool.Entry).

      Parameters:
      allotment - the desired allotment, where each entry handles an allotment of maxMultiplex, or a negative number to always trigger the reservation of a new entry.
      Returns:
      a disabled entry that is contained in the pool, or null if the pool is closed or if the pool already contains getMaxEntries() entries, or the allotment has already been reserved
    • reserve

      public Pool<T>.Entry reserve()

      Creates a new disabled slot into the pool.

      The returned entry must ultimately have the Pool.Entry.enable(Object, boolean) method called or be removed via Pool.Entry.remove() or remove(Pool.Entry).

      Returns:
      a disabled entry that is contained in the pool, or null if the pool is closed or if the pool already contains getMaxEntries() entries
    • acquire

      public Pool<T>.Entry acquire()

      Acquires an entry from the pool.

      Only enabled entries will be returned from this method and their Pool.Entry.enable(Object, boolean) method must not be called.

      Returns:
      an entry from the pool or null if none is available.
    • acquire

      public Pool<T>.Entry acquire(Function<Pool<T>.Entry,T> creator)

      Acquires an entry from the pool, reserving and creating a new entry if necessary.

      Parameters:
      creator - a function to create the pooled value for a reserved entry.
      Returns:
      an entry from the pool or null if none is available.
    • release

      public boolean release(Pool<T>.Entry entry)

      Releases an acquired entry to the pool.

      Entries that are acquired from the pool but never released will result in a memory leak.

      Parameters:
      entry - the value to return to the pool
      Returns:
      true if the entry was released and could be acquired again, false if the entry should be removed by calling remove(Pool.Entry) and the object contained by the entry should be disposed.
    • remove

      public boolean remove(Pool<T>.Entry entry)

      Removes an entry from the pool.

      Parameters:
      entry - the value to remove
      Returns:
      true if the entry was removed, false otherwise
    • isClosed

      public boolean isClosed()
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
    • size

      public int size()
    • values

      public Collection<Pool<T>.Entry> values()
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Description copied from interface: Dumpable
      Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
      Specified by:
      dump in interface Dumpable
      Parameters:
      out - The appendable to dump to
      indent - The indent to apply after any new lines.
      Throws:
      IOException - if unable to write to Appendable
    • toString

      public String toString()
      Overrides:
      toString in class Object