【问题标题】: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());
流通常是跨多个线程处理集合中记录的更简单方法。