for循环中有多个线程

时间:2018-09-06 09:27:15

标签: java multithreading java-threads

我有一个方法需要为列表中的每个元素调用,然后将此列表返回给另一个类中的调用者。我想为每个元素创建一个线程,但是我正在努力地去做。

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,这是我迷失的地方。

1 个答案:

答案 0 :(得分:4)

对于Stream.parallelStream()来说,这似乎是一个完美的用例

public List<MyList> threaded(List<Another> another) {
    return another.parallelStream()
                  .map(a -> test(a));
                  .collect(Collectors.toList());
}

这将在每个test上调用Another,并使用尽可能多的cpus以列表的形式收集结果(最多为您拥有的对象数量)

是的,您可以为每个线程创建一个线程,除了效率低下和复杂得多。