我正在学习java中的fork-join技术并编写了以下程序。我正在运行for循环(5次),我想在不同的线程中运行for循环的内容。这是正确发生的。问题是当所有线程都完成后,我想要一个大小为5的向量,它必须包含在索引0处执行线程1的结果,在索引1处执行线程2的结果........ ....在索引4处执行线程5的结果。我干净地可视化我想要实现的内容,但不知道它的语法。
目前我的矢量中只有一个数字。
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.*;
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService executor = Executors.newCachedThreadPool();
Future<Vector<Integer> > futureResult = null;
for(int i = 0; i < 5; i++){
futureResult = executor.submit(new Callable<Vector<Integer> >(){
@Override
public Vector<Integer> call() throws Exception {
Random random = new Random();
int duration = random.nextInt(4000);
Vector<Integer> v = new Vector<Integer>();
v.add(duration);
return v;
}
});
}
executor.shutdown();
try {
System.out.println(futureResult.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
您正在每个线程中创建一个新向量,而不与共享内存建立任何连接。您可以只传递索引以写入每个线程,并将向量更改为数组或预先分配的内容。
另一种选择是分配5个向量位置并将每个Integer对象发送到它的线程。