我正在尝试在 Java 1.6 中使用带有多线程的 For 循环。我尝试使用流,但显然它是在 Java 1.8 中添加的,所以我尝试使用ExecutorService 和 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
}
它可能会起作用,但表示 -source 1.6 不支持钻石运算符。是的,我不知道如何从这里处理并被卡住了。感谢任何帮助
最佳答案
由于某种原因,没有人显示转换后的代码,所以我会这样做:
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<?>>
- Lambda 替换为匿名类实例化
-
.done()
更改为.get()
等待所有 future 执行完毕
关于java - 在 Java 1.6 中使用 For 循环和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049810/