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 ...