Java中ForkJoinPool如何实现外部任务提交与worker线程执行流程?

2026-05-23 20:570阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计11158个文字,预计阅读时间需要45分钟。

Java中ForkJoinPool如何实现外部任务提交与worker线程执行流程?

ForkJoinPool 是 JDK7 引入的高性能线程池,由 Doug Lea 编写。其核心思想是将大任务为多个小任务(fork),然后并行处理这些小任务,最后将结果汇总(join)。

一、ForkJoinPool

ForkJoinPool 是 JDK7 引入的,由 Doug Lea 编写的高性能线程池。核心思想是将大的任务拆分成多个小任务(即fork),然后在将多个小任务处理汇总到一个结果上(即join),非常像MapReduce处理原理。同时,它提供基本的线程池功能,支持设置最大并发线程数,支持任务排队,支持线程池停止,支持线程池使用情况监控,也是AbstractExecutorService的子类,主要引入了“工作窃取”机制,在多CPU计算机上处理性能更佳。其广泛用在java8的stream中。

Fork/Join Pool采用优良的设计、代码实现和硬件原子操作机制等多种思路保证其执行性能。其中包括(但不限于):计算资源共享、高性能队列、避免伪共享、工作窃取机制等。

二、工作队列WorkQueue

先对ForkJoinPool里的队列有一个感性认识,这个队列和java线程池的队列有很大区别,java线程池的任务队列是一个阻塞队列。而这里的队列是一个队列的数组,也就是多个队列,即ForkJoinPool每个线程都有自己的队列。另外偶数下标的队列用来保存外部提交的任务,奇数下标装的是线程自己的任务。

阅读全文

本文共计11158个文字,预计阅读时间需要45分钟。

Java中ForkJoinPool如何实现外部任务提交与worker线程执行流程?

ForkJoinPool 是 JDK7 引入的高性能线程池,由 Doug Lea 编写。其核心思想是将大任务为多个小任务(fork),然后并行处理这些小任务,最后将结果汇总(join)。

一、ForkJoinPool

ForkJoinPool 是 JDK7 引入的,由 Doug Lea 编写的高性能线程池。核心思想是将大的任务拆分成多个小任务(即fork),然后在将多个小任务处理汇总到一个结果上(即join),非常像MapReduce处理原理。同时,它提供基本的线程池功能,支持设置最大并发线程数,支持任务排队,支持线程池停止,支持线程池使用情况监控,也是AbstractExecutorService的子类,主要引入了“工作窃取”机制,在多CPU计算机上处理性能更佳。其广泛用在java8的stream中。

Fork/Join Pool采用优良的设计、代码实现和硬件原子操作机制等多种思路保证其执行性能。其中包括(但不限于):计算资源共享、高性能队列、避免伪共享、工作窃取机制等。

二、工作队列WorkQueue

先对ForkJoinPool里的队列有一个感性认识,这个队列和java线程池的队列有很大区别,java线程池的任务队列是一个阻塞队列。而这里的队列是一个队列的数组,也就是多个队列,即ForkJoinPool每个线程都有自己的队列。另外偶数下标的队列用来保存外部提交的任务,奇数下标装的是线程自己的任务。

阅读全文