0

我正在学习java中的fork-join技术并编写了以下程序。我正在运行一个 for 循环(5 次),我想在单独的线程中运行 for 循环的内容。这是正确发生的。问题是,当所有线程都完成后,我想要一个大小为 5 的向量,它必须包含在索引 0 处执行线程 1 的结果,在索引 1 处执行线程 2 的结果...... .... 在索引 4 处执行线程 5 的结果。我清楚地看到了我想要实现的目标,但不知道它的语法。

目前我的向量中只有 1 个数字。

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();
        }
    }
}
4

1 回答 1

1

您正在每个线程中创建一个新向量,与共享内存没有任何联系。您可以只传递索引以写入每个线程,也可以将向量更改为数组或预先分配的东西。

另一种选择是分配 5 个向量位置并将每个 Integer 对象发送到其线程。

于 2013-06-02T09:35:55.250 回答