我有一个方法需要为列表中的每个元素调用,然后将此列表返回给另一个类中的调用者。我想为每个元素创建一个线程,但是我正在努力地去做。
public List<MyList> threaded(List<Another> another) {
List<MyList> myList= new ArrayList<>();
Visibility visi = new Visibility();
Thread[] threads = new Thread[another.size()];
for (int i = 0; i < another.size(); i++) {
visi = test(another.get(i));
myList.add(visi);
}
return myList;
}
因此,我定义了一个与another
列表中的元素数量匹配的线程数组。要在循环中使用这些线程中的每个线程,然后在执行完所有线程之后返回myList
,这是我迷失的地方。
答案 0 :(得分:4)
对于Stream.parallelStream()来说,这似乎是一个完美的用例
public List<MyList> threaded(List<Another> another) {
return another.parallelStream()
.map(a -> test(a));
.collect(Collectors.toList());
}
这将在每个test
上调用Another
,并使用尽可能多的cpus以列表的形式收集结果(最多为您拥有的对象数量)
是的,您可以为每个线程创建一个线程,除了效率低下和复杂得多。