原理
ForkJoinPool是jdk7新加的用法,它的优势在于充分的利用cpu,采用工作窃取算法,将一个大任务根据阈值分割成很多个子任务,最后根据场景是否要合并子任务运算结果。
构造1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public ForkJoinPool() {
this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
defaultForkJoinWorkerThreadFactory, null, false);
}
public ForkJoinPool(int parallelism,
ForkJoinWorkerThreadFactory factory,
UncaughtExceptionHandler handler,
boolean asyncMode) {
this(checkParallelism(parallelism),
checkFactory(factory),
handler,
asyncMode ? FIFO_QUEUE : LIFO_QUEUE,
"ForkJoinPool-" + nextPoolId() + "-worker-");
checkPermission();
}
根据是否需要合并子任务运算结果,任务需要继承抽象类RecursiveAction,RecursiveTask<V>
,后者为需要合并子任务结果,泛型为结果类型;