Java多线程,有100个任务需要分成10批执行,每批执行执行有顺序?

MAFT 2023-07-14 02:11:58

 有100个任务需要分成10批执行,每批执行执行有顺序(即第一批执行完执行第二批)。
说明:10批任务有序执行,每批任务的10个任务要做到并发执行
加分项:如果可以,写出多种不同原理或不同工具的实现方式
如果是一台机器上如何实现(代码实现)
如果是多机器集群设计一个架构(简要描述)

...全文
1624 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT小猫咪 2023-07-20
  • 打赏
  • 举报
回复

一台机器上的实现方式(代码实现):

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class BatchExecutor {
    private static final int BATCH_SIZE = 10;
    private static final int TOTAL_TASKS = 100;

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(BATCH_SIZE);

        for (int i = 0; i < TOTAL_TASKS; i += BATCH_SIZE) {
            List<Runnable> batchTasks = new ArrayList<>();
            for (int j = i; j < i + BATCH_SIZE; j++) {
                int taskId = j + 1;
                batchTasks.add(() -> {
                    System.out.println("Executing task " + taskId + " in batch " + ((i / BATCH_SIZE) + 1));
                    // Perform the task here
                });
            }
            
            try {
                executor.invokeAll(batchTasks);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        executor.shutdown();
    }
}

上述代码通过使用线程池(ExecutorService)和任务分批执行的方式实现了在一台机器上有序执行100个任务的需求。通过newFixedThreadPool(BATCH_SIZE)创建了一个固定大小为10的线程池,每批任务使用该线程池并发执行。

任务被分成10批执行,每批执行10个任务。在每批任务执行时,会输出当前正在执行的任务和批次号。你可以在注释标记的位置执行具体的任务逻辑。

多机器集群架构设计(简要描述):

如果要在多机器集群上实现有序执行的任务分批,可以采用以下架构设计:

  1. 使用一个任务调度中心(例如ZooKeeper、Redis等)来协调任务的分配和执行。该中心可以存储任务的元数据,例如任务的状态、批次号等。
  2. 将任务分成多个批次,并将每个批次分配给不同的机器。可以使用一致性哈希算法(Consistent Hashing)或其他分区算法来决定将哪些批次分配给哪些机器。
  3. 每个机器上运行一个任务执行器(Task Executor),负责接收任务调度中心分配的批次,并并发执行批次中的任务。
  4. 任务执行器可以使用多线程或者多进程的方式来实现任务的并发执行。
  5. 当一个批次的任务全部完成后,任务执行器可以向任务调度中心报告批次执行完成的信息,然后等待下一个分配的批次。

这种架构设计可以通过分布式的方式实现任务的有序执行,并且可以水平扩展,以适应更大规模的任务和机器集群。具体的实现细节还需要根据实际情况和使用的技术栈来确定。

MAFT 2023-07-21
  • 举报
回复
@IT小猫咪 GPT写的嘛?

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧