怎么用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安全错误
数据库的锁怎样保障安全
网络安全对传统的
服务器管理软件 免费版
计算机软件开发多少钱
数据库表可以没主键
b s架构的软件开发
sql数据库时间不对
数据库单表去重
河北电脑软件开发价钱
成都十九号笔网络技术有限公司
掌门一对一软件开发怎么样
数字货币的软件开发
数据库试卷湖南农业大学
网络技术服务中心自查报告
软件开发小美
苏州吹塑零件加工管理软件开发
高铁数据网络安全的技术有
0基础自学网络安全书籍
曙光服务器如何更改密码
小华子软件开发
清华周刊数据库
小白怎么学习软件开发
服务器硬件型号有哪些
男孩子学软件开发类吃香吗
和平精英体验服服务器处于维护中
以太网遵循什么网络技术标准
江汉靠谱的软件开发团队
本地数据库文献格式
阿里服务器故障
飞猪订票提示数据库操作错误
创新大学生网络安全教育