怎么用ForkJoin写一个并发执行任务的工具类BatchTaskRunner
发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,本篇内容介绍了"怎么用ForkJoin写一个并发执行任务的工具类BatchTaskRunner"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些
千家信息网最后更新 2024年11月28日怎么用ForkJoin写一个并发执行任务的工具类BatchTaskRunner
本篇内容介绍了"怎么用ForkJoin写一个并发执行任务的工具类BatchTaskRunner"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
实际编程中经常需要并发执行多个任务,并等待这些任务运行结束返回结果。
所以用 Java 的 ForkJoin 简单撸了一个工具类:
package com.gitee.search.utils;import java.util.List;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.RecursiveAction;import java.util.function.Consumer;/** * Batch task action * @author Winter Lau*/public final class BatchTaskRunner extends RecursiveAction { protected int threshold = 5; //每个线程处理的任务数 protected List taskList; Consumer action; /** * @param taskList 任务列表 * @param threshold 每个线程处理的任务数 */ private BatchTaskRunner(List taskList, int threshold, Consumer action) { this.taskList = taskList; this.threshold = threshold; this.action = action; } /** * 多线程批量执行任务 * @param taskList * @param threshold * @param action */ public static
void execute(List taskList, int threshold, Consumer > action) { new BatchTaskRunner(taskList, threshold, action).invoke(); } @Override protected void compute() { if (taskList.size() <= threshold) { this.action.accept(taskList); } else { this.splitFromMiddle(taskList); } } /** * 任务中分 * @param list */ private void splitFromMiddle(List list) { int middle = (int)Math.ceil(list.size() / 2.0); List leftList = list.subList(0, middle); List RightList = list.subList(middle, list.size()); BatchTaskRunner left = newInstance(leftList); BatchTaskRunner right = newInstance(RightList); ForkJoinTask.invokeAll(left, right); } private BatchTaskRunner newInstance(List taskList) { return new BatchTaskRunner(taskList, threshold, action); }}
使用方法:
ListallTasks = Arrays.asList(1,2,3,4,5);int taskPerThread = 1;BatchTaskRunner.execute(allTasks, taskPerThread, tasks -> { System.out.printf("[%s]: %s\n", Thread.currentThread().getName(), tasks);});
这里假设有5个任务(allTasks),其中 taskPerThread 是指定每个线程处理的任务数。
而 { ... } 内就是任务的处理逻辑。
超简单。
"怎么用ForkJoin写一个并发执行任务的工具类BatchTaskRunner"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
任务
线程
处理
工具
内容
实际
更多
知识
实用
学有所成
接下来
使用方法
困境
多个
就是
情况
文章
方法
案例
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机通信网络安全论文
e2ee数据库多条件查询
西瓜星球服务器测评
网络安全你我同行金句
澳洲网络安全差
手机app软件开发17q
完美服务器异常是什么原因
网络安全脱口秀
南昌app软件开发平台有哪些
oa软件开发市场
机房服务器访问管理系统
乡镇网络安全工作任务
学校开展网络安全评估
软件开发效率参考文献
亚马逊有自己的服务器吗
如何在数据库中输入数据库
数据库使用指南
夏维安服务器
奉化专业软件开发教程
泰安ERP软件开发招聘
PVDF的数据库号码
手机版游戏怎么加入其他服务器
密云区环保软件开发推荐
魔兽世界不被踢出服务器
essd 数据库
沃小号注销服务器端执行失败
服务器级管理设置
新会企业网络安全产品
抓包的网络安全软件
网络安全威涉及哪些方面