【问题标题】:Process 1 record from a list of record only once using multithreading使用多线程仅从记录列表中处理 1 条记录
【发布时间】:2018-09-06 08:58:37
【问题描述】:

我有一个包含 X 条记录的列表。我想使用多个线程处理这些记录。目前我已取出记录并将其发送执行。当我打印 threadId 和记录名称时,我可以看到多个线程正在尝试执行同一记录的逻辑,这不应该是这种情况。我该如何限制呢?

【问题讨论】:

标签: java multithreading executorservice


【解决方案1】:

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

顺便说一句,如果你不知道记录是否唯一,你可以使用 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());

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多