这次我的任务是一次插入几千条用户操作数据,在虽然在Linux环境下执行影响不大,但是但window环境下非常的慢,甚至超过请求响应时间,然后我就用ForkJoin处理多数据操作问题,将大任务分为小任务来执行
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情:
1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割
2.执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行完的结果都放在另外一个队列里,启动一个线程从队列里取数据,然后合并这些数据。
操作流程:
一、建立任务类,必须继承RecursiveTask,实现代码如下
public class MyTask extends RecursiveAction {
@Autowired
private AssemblyLogService assemblyLogService;
private List<AssemblyLog> list;
// 每个"小任务"最多执行保存50个数
private static int MAX = 50;
private int start;
private int end;