我粗略讲下关于ForkJoin的原理,ForkJoin框架是一个基于工作偷取算法的高并发框架。其主要的原理就是把要处理的数据,进行拆分,拆分之后再压入线程队列,然后下一级的线程队列再拆分,知道满足临界值的要求,然后对满足临界值的数据执行对应的操作。并且,ForkJoin框架里面有对应的ForkJoinPool管理线程,进行GC,然后其工作偷取算法会让空闲的线程A,去B线程的队列尾部偷取任务并执行。
关于java 1.8 新特性ForkJoin的源码剖析的详细介绍可以参考这篇文章
https://www.jianshu.com/p/f777abb7b251
下面我简要说下我的使用场景,关于同步区块链数据到mysql数据库。
贴一下主要的源码
这是设置ForkJoin要执行的任务
RecursiveTask Object 就是需要处理的数据对象。
public class ForkJoinWork extends RecursiveTask<List<Txs>> {
private Integer start;//起始值
private Integer end;//结束值
private List<Txs> TxsAll;//操作的对象数组
public static final Integer critical = 100;//临界值
TxsService txsService = (TxsService)AllBean.getBean("TxsService");
public ForkJoinWork(Integer start, Integer end,List<Txs> TxsAll) {
this.start =