Class ThreadPoolUtils

java.lang.Object
org.apache.qpid.protonj2.client.util.ThreadPoolUtils

public final class ThreadPoolUtils extends Object
Utility methods for working with thread pools ExecutorService.
  • Field Details

    • DEFAULT_SHUTDOWN_AWAIT_TERMINATION

      public static final long DEFAULT_SHUTDOWN_AWAIT_TERMINATION
      Default thread pool shutdown timeout used to await graceful shutdown.
      See Also:
  • Constructor Details

    • ThreadPoolUtils

      public ThreadPoolUtils()
  • Method Details

    • shutdown

      public static void shutdown(ExecutorService executorService)
      Shutdown the given executor service only (ie not graceful shutdown).
      Parameters:
      executorService - The ExecutorService that is being shutdown.
      See Also:
    • shutdownNow

      public static List<Runnable> shutdownNow(ExecutorService executorService)
      Shutdown now the given executor service aggressively.
      Parameters:
      executorService - the executor service to shutdown now
      Returns:
      list of tasks that never commenced execution
      See Also:
    • shutdownGraceful

      public static void shutdownGraceful(ExecutorService executorService)
      Shutdown the given executor service graceful at first, and then aggressively if the await termination timeout was hit.

      This implementation invokes the shutdownGraceful(java.util.concurrent.ExecutorService, long) with a timeout value of DEFAULT_SHUTDOWN_AWAIT_TERMINATION millis.

      Parameters:
      executorService - The ExecutorService that is being shutdown.
    • shutdownGraceful

      public static void shutdownGraceful(ExecutorService executorService, long shutdownAwaitTermination)
      Shutdown the given executor service graceful at first, and then aggressively if the await termination timeout was hit.

      Will try to perform an orderly shutdown by giving the running threads time to complete tasks, before going more aggressively by doing a shutdownNow(java.util.concurrent.ExecutorService) which forces a shutdown. The parameter shutdownAwaitTermination is used as timeout value waiting for orderly shutdown to complete normally, before going aggressively.

      Parameters:
      executorService - the executor service to shutdown
      shutdownAwaitTermination - timeout in millis to wait for orderly shutdown
    • awaitTermination

      public static boolean awaitTermination(ExecutorService executorService, long shutdownAwaitTermination) throws InterruptedException
      Awaits the termination of the thread pool.

      This implementation will log every 2nd second at INFO level that we are waiting, so the end user can see we are not hanging in case it takes longer time to terminate the pool.

      Parameters:
      executorService - the thread pool
      shutdownAwaitTermination - time in millis to use as timeout
      Returns:
      true if the pool is terminated, or false if we timed out
      Throws:
      InterruptedException - is thrown if we are interrupted during the waiting