java - 使用多线程仅处理记录列表中的 1 条记录一次

标签 java multithreading executorservice

我有一个包含 X 条记录的列表。我想使用多个线程处理这些记录。目前我已经把记录拿出来送去执行。当我打印 threadId 和记录名称时,我可以看到多个线程正在尝试执行同一记录的逻辑,但事实不应该如此。我怎样才能限制这个?

最佳答案

您必须多次将同一条记录传递到池中。没有简单的方法可以意外地执行您的建议,因此很难想象其他任何事情。

顺便说一句,如果您不知道记录是否唯一,可以使用 Steam.distinct()。

List<Result> results = list.stream()
                           .distinct()
                           .parallel()
                           .peek(r -> System.out.println(
                                               Thread.currentThread() + " processes " + r);
                           .map(r -> processRecord(r))
                           .collect(Collectors.toList());

流通常是跨多个线程处理集合中记录的更简单方法。

关于java - 使用多线程仅处理记录列表中的 1 条记录一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52200301/

相关文章:

java - 执行线程仍然显示在CPU中

Python 线程未启动

multithreading - Spring相当于CompletionService?

java - ExecutorService.execute() 不返回线程类型

java - 尝试将 XWPFHyperlink 替换为 XWPFRun 时出现 ConcurrentModificationException

python - Scrapy 不按 DFS 顺序爬行

c++ - 通过多线程对 C++ 中的流进行线程安全写入

java - 具有多个 key (不同密码)的 JKS

java - 从 C# 迁移到 Java,int 和 ushort(按位 AND)

java - 在 Java 中编写递归方法时遇到问题