面试大厂必问的ForkJoin框架剖析【建议收藏】
点关注,不迷路!如果本文对你有帮助的话不要忘记点赞支持哦! 概述 image.png 和传统的线程池使用 AQS 的实现逻辑不同, ForkJoin 引入全新的结构来标识: ForkJoinPool: 用于执行 ForkJoinTask 任务的执行池,不再是传统执行池 Worker+Queue 的组合模式,而是维护了一个队列数组 WorkQueue ,这样在提交任务和线程任务的时候大幅度的减少碰撞。 WorkQueue: 双向列表,用于任务的有序执行,如果 WorkQueue 用于自己的执行线程 Thread ,线程默认将会从top端选取任务用来执行 - LIFO。因为只有owner的Thread才能从top端取任务,所以在设置变量时, int top; 不需要使用 volatile 。 ForkJoinWorkThread: 用于执行任务的线程,用于区别使用非ForkJoinWorkThread线程提交的task;启动一个该Thread,会自动注册一个WorkQueue到Pool, 这里规定,拥有Thread的WorkQueue只能出现在WorkQueue数组的奇数位 ForkJoinTask: 任务, 它比传统的任务更加轻量,不再对是 RUNNABLE 的子类,提供 fork / join 方法用于分割任务以及聚合结果。 为了充分施展并行运算,该框架实现了复杂的 worker