Class ThreadUtils


  • public final class ThreadUtils
    extends java.lang.Object
    Utility class for thread pools.
    • Constructor Detail

      • ThreadUtils

        private ThreadUtils()
    • Method Detail

      • protectExecutorServiceShutdown

        public static CloseableExecutorService protectExecutorServiceShutdown​(CloseableExecutorService executorService,
                                                                              boolean shutdownOnExit)
        Wraps an CloseableExecutorService in such a way as to "protect" it for calls to the ExecutorService.shutdown() or ExecutorService.shutdownNow(). All other calls are delegated as-is to the original service. Note: the exposed wrapped proxy will answer correctly the ExecutorService.isShutdown() query if indeed one of the shutdown methods was invoked.
        Parameters:
        executorService - The original service - ignored if null
        shutdownOnExit - If true then it is OK to shutdown the executor so no wrapping takes place.
        Returns:
        Either the original service or a wrapped one - depending on the value of the shutdownOnExit parameter
      • resolveDefaultClassLoader

        public static java.lang.ClassLoader resolveDefaultClassLoader​(java.lang.Object anchor)
      • resolveDefaultClassLoaders

        public static java.lang.Iterable<java.lang.ClassLoader> resolveDefaultClassLoaders​(java.lang.Object anchor)
      • resolveDefaultClassLoaders

        public static java.lang.Iterable<java.lang.ClassLoader> resolveDefaultClassLoaders​(java.lang.Class<?> anchor)
      • createDefaultInstance

        public static <T> T createDefaultInstance​(java.lang.Class<?> anchor,
                                                  java.lang.Class<T> targetType,
                                                  java.lang.String className)
                                           throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • createDefaultInstance

        public static <T> T createDefaultInstance​(java.lang.ClassLoader cl,
                                                  java.lang.Class<T> targetType,
                                                  java.lang.String className)
                                           throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • createDefaultInstance

        public static <T> T createDefaultInstance​(java.lang.Iterable<? extends java.lang.ClassLoader> cls,
                                                  java.lang.Class<T> targetType,
                                                  java.lang.String className)
                                           throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • resolveDefaultClassLoader

        public static java.lang.ClassLoader resolveDefaultClassLoader​(java.lang.Class<?> anchor)

        Attempts to find the most suitable ClassLoader as follows:

        • Check the Thread.getContextClassLoader() value

        • If no thread context class loader then check the anchor class (if given) for its class loader

        • If still no loader available, then use ClassLoader.getSystemClassLoader()

        Parameters:
        anchor - The anchor Class to use if no current thread context class loader - ignored if null
        Returns:
        The resolved ClassLoader - Note: might still be null if went all the way "down" to the system class loader and it was also null.
      • iterateDefaultClassLoaders

        public static java.util.Iterator<java.lang.ClassLoader> iterateDefaultClassLoaders​(java.lang.Class<?> anchor)
      • newFixedThreadPool

        public static CloseableExecutorService newFixedThreadPool​(java.lang.String poolName,
                                                                  int nThreads)
      • newSingleThreadScheduledExecutor

        public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor​(java.lang.String poolName)
      • newSingleThreadExecutor

        public static CloseableExecutorService newSingleThreadExecutor​(java.lang.String poolName)