美文网首页技术栈
2019-04-04——Java并发包 Fork/Join框架

2019-04-04——Java并发包 Fork/Join框架

作者: 烟雨乱平生 | 来源:发表于2019-04-07 23:38 被阅读0次

    作为框架的提交入口,ForkJoinPool管理着线程池中线程和任务队列,标识线程池是否还接收任务,显示现在的线程运行状态。

    ForkJoinPool 中,线程池中每个工作线程(ForkJoinWorkerThread)都对应一个任务队列(WorkQueue),工作线程优先处理来自自身队列的任务(LIFO或FIFO顺序,参数 mode 决定),然后以FIFO的顺序随机窃取其他队列中的任务。

    6050820-6f7e15e2dd192c8a.png
    ForkJoinPool 中的任务分为两种:
    • 一种是本地提交的任务(Submission task,如 executesubmit提交的任务);
    • 另外一种是 fork 出的子任务(Worker task)。

    两种任务都会存放在 WorkQueue 数组中,但是这两种任务并不会混合在同一个队列里,ForkJoinPool 内部使用了一种随机哈希算法(有点类似 ConcurrentHashMap 的桶随机算法)将工作队列与对应的工作线程关联起来,Submission 任务存放在 WorkQueue 数组的偶数索引位置,Worker 任务存放在奇数索引位。实质上,SubmissionWorker 一样,只不过他它们被限制只能执行它们提交的本地任务。

    6050820-bb9f0a717d8490bf.png

    相关文章

      网友评论

        本文标题:2019-04-04——Java并发包 Fork/Join框架

        本文链接:https://www.haomeiwen.com/subject/lxzqiqtx.html