我必须遍历一个列表,并为每个对象调用一个方法,但要并行。在循环之后,还有其他语句,它们必须等待并行方法调用。我如何在Java中做到这一点?
public void a(List<Object> list) {
for(Object o : list) {
asynchMethod(o); // this n method call must run in the same time
}
// wait for all asynchMethod result
/**
* ...other statements
*/
}
private void asynchMethod(Object o) {
// some code
}
我看到您使用的是Java8,然后可以使用parallelStream方法:
public void a(List<Object> list) {
list.parallelStream().forEach(s -> asyncMethod(o));
}
它必须等待并行方法调用
foreach是一个终端操作,也就是它将等待完成,直到前进到下一个代码行:Java parallel stream:如何等待并行流完成的线程?
注意使用线程和pararellStream,它们会有自己的一堆问题。在使用它们之前,您应该总是仔细检查情况,看看它们是否值得它们可能带来的麻烦:我应该总是在可能的情况下使用并行流吗?
问题内容: 我有一个方法: 该方法位于jar中,我无法访问其源代码。因此,我需要以并行方式执行invokList,有人可以为此提供帮助吗? 想法是将列表拆分为多个列表,然后并行执行invokList。 我做了这个例子: 问题答案: 看起来很冗长,但是您可以尝试以下方法。该方法将使列表块并行运行。 我 为30个 整数 列表 运行,其 块大小为5, 如下所示: 输出 :
我有一个方法: 这个方法在一个jar中,我无法访问它的源代码。因此,我需要以并行方式执行invokList,有人能帮我吗? 这个想法是将列表拆分为多个列表并并行执行invokList。 我举了一个例子:
问题内容: 我有一个列表列表(由于必须动态生成它,所以不能是元组),它的结构为一个int和一个float的列表列表,像这样: 我想对它进行排序,但我只能设法获得内置的排序功能,以便按列表的第一个元素对其进行排序,或者什么也不做,但是我需要按列表的第二个元素对它们进行排序,但是我没有不想实现我自己的排序功能。所以我想要的一个例子是: 有人可以告诉我如何获取内置的排序功能之一来执行此操作吗? 问题答案
问题内容: 我有一个类(ClassA),可以在目录中获取文件。它在给定目录中扫描与正则表达式匹配的文件。对于每个匹配的文件,它将文件对象添加到列表中。处理目录后,它将文件列表传递给另一个类(ClassB)进行处理 我正在编写ClassA的单元测试,因此正在使用Mockito模拟ClassB,并将其注入ClassA。然后,我想在不同情况下验证传递给ClassB的列表的内容(即我的模拟) 我将代码剥离
假设我有一个类ClassA,这个类有一个toString方法。如果我有一个ClassA列表,我如何使用一个流创建一个新的字符串列表,在这个流中我遍历ClassA列表中的每个对象,并在一行中调用toString呢?大概是这样的:
我现在正在寻找一个线程安全的程序,允许我在程序中实现时间优先级。如果你愿意,我很乐意与你分享代码,但我认为这对我的问题并不重要。当我开始运行这个程序的一个(非线程安全)版本时,我最初使用的是一个链表,但是现在我切换到了一个线程安全的版本,我已经从一个链表变成了一个并发链接队列。问题是我需要从队列中获取元素(通常从头部,偶尔从尾部)。我真的只需要看看头部的元素是否满足某个性质。在链表版本中,它看起来