Interface TaskExecutor
- All Superinterfaces:
AutoCloseable
- All Known Implementing Classes:
DefaultTaskExecutor, SequentialTaskExecutor
TaskExecutor is recommended to be used in image
processing algorithms instead of ExecutorService.
It's simpler to use, and allows single threaded execution.
// Example of a multi threaded method that fills an image with ones.
public void fillWithOnes( RandomAccessibleInterval< IntType > image, TaskExecutor taskExecutor )
{
int numTasks = taskExecutor.suggestNumberOfTasks();
List< RandomAccessibleInterval< IntType > > chunks = splitImageIntoChunks( image, numTasks );
// The TaskExecutor executes the forEach method in multi threads, if requested.
taskExecutor.forEach( chunks, chunk -> {
for ( IntType pixel : Views.iterable( chunk ) )
pixel.setOne();
} );
}
// The method can be run multi threaded or single threaded
fillWithOnes( image, TaskExecutors.singleThreaded() );
fillWithOnes( image, TaskExecutors.multiThreaded() );
-
Method Summary
Modifier and TypeMethodDescriptionvoidclose()<T> voidLikerunAll(List)but - instead of a list of tasks - it takes a list of parameters and a function that is called for each of the parameters.<T,R> List <R> forEachApply(List<? extends T> parameters, Function<? super T, ? extends R> task) LikeforEach(List, Consumer)but collects the results.Get the underlyingExecutorService.intGet the number of threads that are used for execution.voidThis method will execute the given list of tasks.intIf there is a big task that could be split into sub tasks for parallelization, this method gives you a reasonable number of sub tasks.
-
Method Details
-
getParallelism
int getParallelism()Get the number of threads that are used for execution. -
suggestNumberOfTasks
int suggestNumberOfTasks()If there is a big task that could be split into sub tasks for parallelization, this method gives you a reasonable number of sub tasks.A single threaded
TaskExecutorwill return 1. A multi threadedTaskExecutorwill usually return 4 times the number of threads. -
runAll
This method will execute the given list of tasks. A single threadedTaskExecutorwill execute the tasks one after the other. A multi threadedTaskExecutorwill distribute the tasks to the threads. The method blocks until all tasks are completed. -
forEach
LikerunAll(List)but - instead of a list of tasks - it takes a list of parameters and a function that is called for each of the parameters. -
forEachApply
LikeforEach(List, Consumer)but collects the results. -
getExecutorService
ExecutorService getExecutorService()Get the underlyingExecutorService. This is not always a fully functionalExecutorService: Especially the methodsExecutorService.shutdown()andExecutorService.awaitTermination(long, TimeUnit)must not be used. -
close
void close()- Specified by:
closein interfaceAutoCloseable
-