Class ThreadPoolUtils


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

      • DEFAULT_SHUTDOWN_AWAIT_TERMINATION

        public static final long DEFAULT_SHUTDOWN_AWAIT_TERMINATION
        See Also:
        Constant Field Values
    • Constructor Detail

      • ThreadPoolUtils

        public ThreadPoolUtils()
    • Method Detail

      • 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:
        ExecutorService.shutdownNow()
      • 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. If the shutdownAwaitTermination value is negative the shutdown waits indefinitely for the ExecutorService to complete its shutdown.

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

        public static void awaitTermination​(ExecutorService executorService)
                                     throws InterruptedException
        Awaits the termination of the thread pool indefinitely (Use with Caution).

        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
        Throws:
        InterruptedException - is thrown if we are interrupted during the waiting
      • 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