The fork/join framework is an implementation of the
As with any
The center of the fork/join framework is the
The first step for using the fork/join framework is to write code that performs a segment of the work. Your code should look similar to the following pseudocode:
Wrap this code in a
After your
One such implementation, introduced in Java SE 8, is used by the
Another implementation of the fork/join framework is used by methods in the
Read full article from Fork/Join (The Java™ Tutorials > Essential Classes > Concurrency)
ExecutorService
interface that helps you take advantage of multiple processors. It is designed for work that can be broken into smaller pieces recursively. The goal is to use all the available processing power to enhance the performance of your application.As with any
ExecutorService
implementation, the fork/join framework distributes tasks to worker threads in a thread pool. The fork/join framework is distinct because it uses awork-stealing algorithm. Worker threads that run out of things to do can steal tasks from other threads that are still busy.The center of the fork/join framework is the
ForkJoinPool
class, an extension of the AbstractExecutorService
class. ForkJoinPool
implements the core work-stealing algorithm and can execute ForkJoinTask
processes.The first step for using the fork/join framework is to write code that performs a segment of the work. Your code should look similar to the following pseudocode:
if (my portion of the work is small enough) do the work directly else split my work into two pieces invoke the two pieces and wait for the results
ForkJoinTask
subclass, typically using one of its more specialized types, either RecursiveTask
(which can return a result) or RecursiveAction
.After your
ForkJoinTask
subclass is ready, create the object that represents all the work to be done and pass it to the invoke()
method of a ForkJoinPool
instance.protected void compute() { if (mLength < sThreshold) { computeDirectly(); return; } int split = mLength / 2; invokeAll(new ForkBlur(mSource, mStart, split, mDestination), new ForkBlur(mSource, mStart + split, mLength - split, mDestination)); }
One such implementation, introduced in Java SE 8, is used by the
java.util.Arrays
class for its parallelSort()
methods. These methods are similar to sort()
, but leverage concurrency via the fork/join framework. Parallel sorting of large arrays is faster than sequential sorting when run on multiprocessor systems.Another implementation of the fork/join framework is used by methods in the
java.util.streams
package, which is part of Project Lambda scheduled for the Java SE 8 release.Read full article from Fork/Join (The Java™ Tutorials > Essential Classes > Concurrency)
No comments:
Post a Comment