Executors allow you to avoid the creation and management of threads. You implement tasks by implementing Runnable or Callable interfaces and sending them to the executor. It has a pool of threads and uses one of them to execute the tasks.
Java 7 provides a new kind of executor with the fork/join framework. This executor, implemented in the ForkJoinPool class, is designed for problems that can be split into smaller parts using the divide and conquer technique. When you implement a task for the fork/join framework, you have to check the size of the problem you have to resolve. If it's bigger than a predefined size, you divide the problem into two or more subcategories and create as many subtasks as the number of divisions you have made. The task sends these subtasks to the ForkJoinPool class using the fork() operation and waits for its finalization using the...