在Java 1.6中使用多线程For循环
我尝试在Java1.6中使用多线程的For循环。我尝试使用streams,但显然它是在Java1.8中添加的,所以我尝试使用ExecutorService和Future,但我无法让它工作 我想要的是使这段代码具有固定线程数的多线程在Java 1.6中使用多线程For循环,java,multithreading,Java,Multithreading,我尝试在Java1.6中使用多线程的For循环。我尝试使用streams,但显然它是在Java1.8中添加的,所以我尝试使用ExecutorService和Future,但我无法让它工作 我想要的是使这段代码具有固定线程数的多线程 for (ExampleType ex : exampleData) { exampleFunction(ex.getSomeData()); } 我试过但没用的东西,是在谷歌的某个地方找到的 final ExecutorService testExecut
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
}
final executor服务testExecutor=Executors.newFixedThreadPool(10);//只有10根线
最终列表executeData=testExecutor.submit(()->{
exampleFunction(例如getSomeData());
});
添加(executeData);
}
for(未来已执行数据:已执行数据){
executeData.done();//我需要在这里写东西吗?我没有done()函数
}
它可能会工作,但说钻石运算符在源代码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();
}
final executor服务testExecutor=Executors.newFixedThreadPool(10);
最终名单>();
例如(ExampleType示例:exampleData){
Future executeData=testExecutor.submit(new Runnable()){
@凌驾
公开募捐{
exampleFunction(例如getSomeData());
}
});
添加(executeData);
}
for(未来已执行数据:已执行数据){
//调用get in循环以有效地等待所有未来完成
executeData.get();
}
进行了三项修改:
ArrayList
替换为ArrayList由于lambda,该代码在Java 6中无法工作。您需要将其编写为一个匿名类。executeData.get()
按您提交结果的顺序等待结果。如果您希望它们按完成顺序排列,请使用CompletionService
。为什么还要使用Java1.6?它已经有10多年的历史了。