Class ThreadPoolImpl

java.lang.Object
com.sun.corba.ee.impl.threadpool.ThreadPoolImpl
All Implemented Interfaces:
ThreadPool, Closeable, AutoCloseable

@ManagedObject @Description("A ThreadPool used by the ORB") public class ThreadPoolImpl extends Object implements ThreadPool
  • Field Details

    • DEFAULT_INACTIVITY_TIMEOUT

      public static final int DEFAULT_INACTIVITY_TIMEOUT
      See Also:
    • threadCounter

      private static final AtomicInteger threadCounter
    • workQueue

      private final WorkQueue workQueue
    • availableWorkerThreads

      private int availableWorkerThreads
    • currentThreadCount

      private int currentThreadCount
    • minWorkerThreads

      private final int minWorkerThreads
    • maxWorkerThreads

      private final int maxWorkerThreads
    • inactivityTimeout

      private final long inactivityTimeout
    • processedCount

      private AtomicLong processedCount
    • totalTimeTaken

      private AtomicLong totalTimeTaken
    • name

      private final String name
    • threadGroup

      private ThreadGroup threadGroup
    • workerThreadClassLoader

      private final ClassLoader workerThreadClassLoader
    • workersLock

      final Object workersLock
    • workers

  • Constructor Details

    • ThreadPoolImpl

      public ThreadPoolImpl(String threadpoolName)
      Create an unbounded thread pool in the current thread group with the current context ClassLoader as the worker thread default ClassLoader.
    • ThreadPoolImpl

      public ThreadPoolImpl(ThreadGroup tg, String threadpoolName)
      Create an unbounded thread pool in the given thread group with the current context ClassLoader as the worker thread default ClassLoader.
    • ThreadPoolImpl

      public ThreadPoolImpl(ThreadGroup tg, String threadpoolName, ClassLoader defaultClassLoader)
      Create an unbounded thread pool in the given thread group with the given ClassLoader as the worker thread default ClassLoader.
    • ThreadPoolImpl

      public ThreadPoolImpl(int minSize, int maxSize, long timeout, String threadpoolName)
      Create a bounded thread pool in the current thread group with the current context ClassLoader as the worker thread default ClassLoader.
    • ThreadPoolImpl

      public ThreadPoolImpl(int minSize, int maxSize, long timeout, String threadpoolName, ClassLoader defaultClassLoader)
      Create a bounded thread pool in the current thread group with the given ClassLoader as the worker thread default ClassLoader.
  • Method Details

    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • getDefaultClassLoader

      private static ClassLoader getDefaultClassLoader()
    • getAnyWorkQueue

      public WorkQueue getAnyWorkQueue()
      Description copied from interface: ThreadPool
      This method will return any instance of the WorkQueue. If the ThreadPool instance only services one WorkQueue then that WorkQueue instance will be returned. If there are more than one WorkQueues serviced by this ThreadPool, then this method would return a WorkQueue based on the implementation of the class that implements this interface. For PE 8.0 we would return a WorkQueue in a roundrobin fashion everytime this method is called. In the future we could allow pluggability of Policy objects for this.
      Specified by:
      getAnyWorkQueue in interface ThreadPool
    • getWorkQueue

      public WorkQueue getWorkQueue(int queueId) throws NoSuchWorkQueueException
      Description copied from interface: ThreadPool
      This method will return an instance of the of the WorkQueue given a queueId. This will be useful in situations where there are more than one WorkQueues managed by the ThreadPool and the user of the ThreadPool wants to always use the same WorkQueue for doing the Work. If the number of WorkQueues in the ThreadPool are 10, then queueIds will go from 0-9
      Specified by:
      getWorkQueue in interface ThreadPool
      Throws:
      NoSuchWorkQueueException - thrown when queueId passed is invalid
    • createWorkerThreadHelper

      private Thread createWorkerThreadHelper(String name)
    • createWorkerThread

      void createWorkerThread()
      To be called from the WorkQueue to create worker threads when none available.
    • minimumNumberOfThreads

      public int minimumNumberOfThreads()
      Description copied from interface: ThreadPool
      This method will return the minimum number of threads maintained by the threadpool.
      Specified by:
      minimumNumberOfThreads in interface ThreadPool
    • maximumNumberOfThreads

      public int maximumNumberOfThreads()
      Description copied from interface: ThreadPool
      This method will return the maximum number of threads in the threadpool at any point in time, for the life of the threadpool
      Specified by:
      maximumNumberOfThreads in interface ThreadPool
    • idleTimeoutForThreads

      public long idleTimeoutForThreads()
      Description copied from interface: ThreadPool
      This method will return the time in milliseconds when idle threads in the threadpool are removed.
      Specified by:
      idleTimeoutForThreads in interface ThreadPool
    • currentNumberOfThreads

      @ManagedAttribute @Description("The current number of threads") public int currentNumberOfThreads()
      Description copied from interface: ThreadPool
      This method will return the current number of threads in the threadpool. This method returns a value which is not synchronized.
      Specified by:
      currentNumberOfThreads in interface ThreadPool
    • decrementCurrentNumberOfThreads

      void decrementCurrentNumberOfThreads()
    • incrementCurrentNumberOfThreads

      void incrementCurrentNumberOfThreads()
    • numberOfAvailableThreads

      @ManagedAttribute @Description("The number of available threads in this ThreadPool") public int numberOfAvailableThreads()
      Description copied from interface: ThreadPool
      This method will return the number of available threads in the threadpool which are waiting for work. This method returns a value which is not synchronized.
      Specified by:
      numberOfAvailableThreads in interface ThreadPool
    • numberOfBusyThreads

      @ManagedAttribute @Description("The number of threads busy processing work in this ThreadPool") public int numberOfBusyThreads()
      Description copied from interface: ThreadPool
      This method will return the number of busy threads in the threadpool This method returns a value which is not synchronized.
      Specified by:
      numberOfBusyThreads in interface ThreadPool
    • averageWorkCompletionTime

      @ManagedAttribute @Description("The average time needed to complete a work item") public long averageWorkCompletionTime()
      Description copied from interface: ThreadPool
      This method returns the average elapsed time taken to complete a Work item.
      Specified by:
      averageWorkCompletionTime in interface ThreadPool
    • currentProcessedCount

      @ManagedAttribute @Description("The number of work items processed") public long currentProcessedCount()
      Description copied from interface: ThreadPool
      This method returns the number of Work items processed by the threadpool
      Specified by:
      currentProcessedCount in interface ThreadPool
    • getName

      @NameValue public String getName()
      Description copied from interface: ThreadPool
      This method will return the name of the threadpool.
      Specified by:
      getName in interface ThreadPool
    • numberOfWorkQueues

      public int numberOfWorkQueues()
      This method will return the number of WorkQueues serviced by the threadpool.
      Specified by:
      numberOfWorkQueues in interface ThreadPool
    • getUniqueThreadId

      private static int getUniqueThreadId()
    • decrementNumberOfAvailableThreads

      void decrementNumberOfAvailableThreads()
      This method will decrement the number of available threads in the threadpool which are waiting for work. Called from WorkQueueImpl.requestWork()
    • incrementNumberOfAvailableThreads

      void incrementNumberOfAvailableThreads()
      This method will increment the number of available threads in the threadpool which are waiting for work. Called from WorkQueueImpl.requestWork()