Concurrency Java fork-join问题

Concurrency Java fork-join问题,concurrency,executorservice,java.util.concurrent,callable,fork-join,Concurrency,Executorservice,Java.util.concurrent,Callable,Fork Join,我正在学习java中的fork-join技术,并编写了以下程序。我正在运行for循环(5次),我希望在单独的线程中运行for循环的内容。这是正确的。问题是,当所有线程都完成时,我需要一个大小为5的向量,它必须包含索引0处线程1的执行结果,索引1处线程2的执行结果。。。。。。。。。。。。在索引4处执行线程5的结果。我清楚地想象了我想要实现的目标,但不知道它的语法 目前我的向量中只有一个数字 import java.util.Random; import java.util.Vector; impo

我正在学习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();
        }
    }
}
import java.util.Random;
导入java.util.Vector;
导入java.util.concurrent.*;
公共类应用程序{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ExecutorService executor=Executors.newCachedThreadPool();
未来结果=空;
对于(int i=0;i<5;i++){
futureResult=executor.submit(新的可调用(){
@凌驾
公共向量调用()引发异常{
随机=新随机();
int duration=random.nextInt(4000);
向量v=新向量();
v、 添加(持续时间);
返回v;
}
}); 
}
executor.shutdown();
试一试{
System.out.println(futuresult.get());
}捕获(中断异常|执行异常e){
e、 printStackTrace();
}
}
}

您正在每个线程中创建一个新的向量,而不与共享内存建立任何连接。您只需将要写入的索引传递给每个线程,还可以将向量更改为数组或预先分配的内容

另一个选项是分配5个向量位置,并将每个整数对象发送到其线程