Class ThreadUtils


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

      • IS_INTERNAL_THREAD

        private static final java.lang.ThreadLocal<java.lang.Boolean> IS_INTERNAL_THREAD
        Marks framework-internal threads.
    • Constructor Detail

      • ThreadUtils

        private ThreadUtils()
    • Method Detail

      • runAsInternal

        public static <V> V runAsInternal​(java.util.concurrent.Callable<V> code)
                                   throws java.lang.Exception
        Runs a piece of code given as a Callable with a flag set indicating that the executing thread is an Apache MINA sshd framework-internal thread.
        Type Parameters:
        V - return type
        Parameters:
        code - code to run
        Returns:
        the result of code
        Throws:
        java.lang.Exception - propagated from code.call()
      • runAsInternal

        public static <T,​V> V runAsInternal​(T param,
                                                  IOFunction<? super T,​V> code)
                                           throws java.io.IOException
        Runs an IOFunction with a flag set indicating that the executing thread is an Apache MINA sshd framework-internal thread.
        Type Parameters:
        T - parameter type
        V - return type
        Parameters:
        param - parameter for the function
        code - function to run
        Returns:
        the result of code
        Throws:
        java.lang.Exception - propagated from code.apply()
        java.io.IOException
      • isInternalThread

        public static boolean isInternalThread()
        Tells whether the calling thread is an Apache MINA sshd framework-internal thread.
        Returns:
        true if the thread is considered internal to the framework; false if not
        See Also:
        runAsInternal(Callable)
      • 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)
      • resolveDefaultClass

        public static java.lang.Class<?> resolveDefaultClass​(java.lang.Class<?> anchor,
                                                             java.lang.String className)
      • resolveDefaultClass

        public static java.lang.Class<?> resolveDefaultClass​(java.lang.Iterable<? extends java.lang.ClassLoader> cls,
                                                             java.lang.String className)
      • createDefaultInstance

        public static <T> T createDefaultInstance​(java.lang.Class<?> anchor,
                                                  java.lang.Class<? extends 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<? extends 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<? extends 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)