我试图在Java 1.6中使用具有多线程的For循环。我试图使用流,但显然它是在Java 1.8中添加的,所以我尝试使用ExcutorService和Future但我无法使其工作。
我想要的只是使用固定数量的线程使这个代码成为多线程。
for (ExampleType ex : exampleData) {
exampleFunction(ex.getSomeData());
}
我尝试过但没有工作,从谷歌的某个地方发现它
final ExecutorService testExecutor = Executors.newFixedThreadPool(10); // just 10 thread
final List<Future<?>> executeDatas = new ArrayList<List>();
for (ExampleType ex : exampleData) {
Future<?> executeData = testExecutor.submit(() -> {
exampleFunction(ex.getSomeData());
});
executeDatas.add(executeData);
}
for (Future<?> executeData : executeDatas) {
executeData.done(); // do i need to write stuff here? i don't have done() function
}
它可能会起作用但是在1.6版本中不支持钻石操作员。是的,我不确定如何从这里处理并被困住。任何帮助表示赞赏
答案 0 :(得分:2)
出于某种原因,没有人显示转换后的代码,所以我会这样做:
break
进行了三项更改:
final ExecutorService testExecutor = Executors.newFixedThreadPool(10);
final List<Future<?>> executeDatas = new ArrayList<Future<?>>();
for (ExampleType ex : exampleData) {
Future<?> executeData = testExecutor.submit(new Runnable() {
@Override
public void run() {
exampleFunction(ex.getSomeData());
}
});
executeDatas.add(executeData);
}
for (Future<?> executeData : executeDatas) {
// calling get in loop to effectively wait for all the futures to finish
executeData.get();
}
已替换为ArrayList<List>
ArrayList<Future<?>>
更改为.done()
以等待所有期货完成执行