Class ForkJoinExecutorService

  • All Implemented Interfaces:
    java.util.concurrent.Executor, java.util.concurrent.ExecutorService

    public class ForkJoinExecutorService
    extends java.util.concurrent.AbstractExecutorService
    The ForkJoinExecutorService is an ExecutorService, for efficient nested parallelization.

    The ForkJoinPool is an ExecutorService that provides an entry point to a technique called work-steeling. Work-steeling allows good performance for nested parallelization. But calling ForkJoinPool.submit(java.util.concurrent.ForkJoinTask<T>) or ForkJoinPool.invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) alone, won't result in any work-steeling and performance boost. It's necessary to use ForkJoinTasks and their methods fork or invokeAll to benefit from work-steeling.

    ForkJoinExecutorService is an ExecutorService that internally calls ForkJoinTask.fork() and ForkJoinTask.invokeAll(...) and therefore directly achieves good performance by work-steeling.

    ForkJoinExecutorService is not a fully functional ExecutorService. Methods like shutdownNow(), awaitTermination(long, TimeUnit) and invokeAll(Collection, long, TimeUnit) are not implemented.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean awaitTermination​(long l, java.util.concurrent.TimeUnit timeUnit)  
      void execute​(java.lang.Runnable runnable)  
      int getParallelism()  
      private java.util.concurrent.ForkJoinPool getPool()  
      <T> java.util.List<java.util.concurrent.Future<T>> invokeAll​(java.util.Collection<? extends java.util.concurrent.Callable<T>> collection)  
      <T> java.util.List<java.util.concurrent.Future<T>> invokeAll​(java.util.Collection<? extends java.util.concurrent.Callable<T>> collection, long l, java.util.concurrent.TimeUnit timeUnit)  
      boolean isShutdown()  
      boolean isTerminated()  
      void shutdown()  
      java.util.List<java.lang.Runnable> shutdownNow()  
      java.util.concurrent.Future<?> submit​(java.lang.Runnable runnable)  
      <T> java.util.concurrent.Future<T> submit​(java.lang.Runnable runnable, T t)  
      <T> java.util.concurrent.Future<T> submit​(java.util.concurrent.Callable<T> callable)  
      • Methods inherited from class java.util.concurrent.AbstractExecutorService

        invokeAny, invokeAny, newTaskFor, newTaskFor
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ForkJoinExecutorService

        public ForkJoinExecutorService()
    • Method Detail

      • getParallelism

        public int getParallelism()
      • shutdown

        public void shutdown()
      • shutdownNow

        public java.util.List<java.lang.Runnable> shutdownNow()
      • isShutdown

        public boolean isShutdown()
      • isTerminated

        public boolean isTerminated()
      • awaitTermination

        public boolean awaitTermination​(long l,
                                        java.util.concurrent.TimeUnit timeUnit)
                                 throws java.lang.InterruptedException
        Throws:
        java.lang.InterruptedException
      • invokeAll

        public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll​(java.util.Collection<? extends java.util.concurrent.Callable<T>> collection)
                                                                     throws java.lang.InterruptedException
        Specified by:
        invokeAll in interface java.util.concurrent.ExecutorService
        Overrides:
        invokeAll in class java.util.concurrent.AbstractExecutorService
        Throws:
        java.lang.InterruptedException
      • invokeAll

        public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll​(java.util.Collection<? extends java.util.concurrent.Callable<T>> collection,
                                                                            long l,
                                                                            java.util.concurrent.TimeUnit timeUnit)
                                                                     throws java.lang.InterruptedException
        Specified by:
        invokeAll in interface java.util.concurrent.ExecutorService
        Overrides:
        invokeAll in class java.util.concurrent.AbstractExecutorService
        Throws:
        java.lang.InterruptedException
      • submit

        public java.util.concurrent.Future<?> submit​(java.lang.Runnable runnable)
        Specified by:
        submit in interface java.util.concurrent.ExecutorService
        Overrides:
        submit in class java.util.concurrent.AbstractExecutorService
      • submit

        public <T> java.util.concurrent.Future<T> submit​(java.lang.Runnable runnable,
                                                         T t)
        Specified by:
        submit in interface java.util.concurrent.ExecutorService
        Overrides:
        submit in class java.util.concurrent.AbstractExecutorService
      • submit

        public <T> java.util.concurrent.Future<T> submit​(java.util.concurrent.Callable<T> callable)
        Specified by:
        submit in interface java.util.concurrent.ExecutorService
        Overrides:
        submit in class java.util.concurrent.AbstractExecutorService
      • execute

        public void execute​(java.lang.Runnable runnable)
      • getPool

        private java.util.concurrent.ForkJoinPool getPool()