Class ReservedThreadExecutor

  • All Implemented Interfaces:
    java.util.concurrent.Executor, Dumpable, LifeCycle, TryExecutor

    @ManagedObject("A pool for reserved threads")
    public class ReservedThreadExecutor
    extends AbstractLifeCycle
    implements TryExecutor, Dumpable

    A TryExecutor using pre-allocated/reserved threads from an external Executor.

    Calls to tryExecute(Runnable) on ReservedThreadExecutor will either succeed with a reserved thread immediately being assigned the task, or fail if no reserved thread is available.

    Threads are reserved lazily, with new reserved threads being allocated from the external Executor passed to the constructor. Whenever 1 or more reserved threads have been idle for more than getIdleTimeoutMs() then one reserved thread will return to the external Executor.

    • Constructor Detail

      • ReservedThreadExecutor

        public ReservedThreadExecutor​(java.util.concurrent.Executor executor,
                                      int capacity)
        executor - The executor to use to obtain threads
        capacity - The number of threads to preallocate. If less than 0 then capacity is calculated based on a heuristic from the number of available processors and thread pool size.
    • Method Detail

      • getExecutor

        public java.util.concurrent.Executor getExecutor()
      • getCapacity

        @ManagedAttribute(value="max number of reserved threads",
        public int getCapacity()
        the maximum number of reserved threads
      • setIdleTimeout

        public void setIdleTimeout​(long idleTime,
                                   java.util.concurrent.TimeUnit idleTimeUnit)
        Set the idle timeout for shrinking the reserved thread pool
        idleTime - Time to wait before shrinking, or 0 for default timeout.
        idleTimeUnit - Time units for idle timeout
      • doStart

        public void doStart()
                     throws java.lang.Exception
        doStart in class AbstractLifeCycle
      • doStop

        public void doStop()
                    throws java.lang.Exception
        doStop in class AbstractLifeCycle
      • execute

        public void execute​(java.lang.Runnable task)
                     throws java.util.concurrent.RejectedExecutionException
        Specified by:
        execute in interface java.util.concurrent.Executor
        Specified by:
        execute in interface TryExecutor
      • tryExecute

        public boolean tryExecute​(java.lang.Runnable task)

        Executes the given task if and only if a reserved thread is available.

        Specified by:
        tryExecute in interface TryExecutor
        task - the task to run
        true if and only if a reserved thread was available and has been assigned the task to run.
      • dump

        public void dump​(java.lang.Appendable out,
                         java.lang.String indent)
        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
        out - The appendable to dump to
        indent - The indent to apply after any new lines.
        Throws: - if unable to write to Appendable