【发布时间】:2023-03-03 17:51:01
【问题描述】:
我有一个方法需要为列表中的每个元素调用,然后将此列表返回给另一个类中的调用者。我想为每个元素创建一个线程,但我很难弄清楚如何做到这一点。
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,这就是我迷路的地方。
【问题讨论】:
-
两件事:首先,您不应该为每个元素都创建新线程。如果您列出了 1000 个元素,您的应用程序将花费更多时间等待操作系统安排所有这些线程,然后再执行实际操作。其次,如果您的线程将元素添加到同一个集合中,那么该集合必须是线程安全的。所以两个最常见的选择:使用 parallelStream 或通过 ExecutorService 使用线程池
标签: java multithreading java-threads