0

我学习Java中的fork-join技术,写了下面的程序。我正在运行for循环(5次),我想在单独的线程中运行for循环的内容。这是正确的。问题是,当所有线程完成时,我想要一个大小为5的向量,它必须包含在索引0处执行线程1的结果,在索引1处执行线程2的结果........ ....在索引4处执行线程5的结果。我干净地直观地显示了我想实现的内容,但不知道它的语法。的Java叉加入问题

目前,我会在我的向量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(); 
     } 
    } 
} 

回答

1

你创造了每一个线程一个新的载体,没有与共享内存的任何连接。你可以通过索引写入每个线程,并将矢量更改为数组或预先分配的数组。

另一种选择是,以分配5个向量位置和每一个整数对象发送到其线程。

+0

好,谢谢buuuuuuudy让我试试这个...... – VVV

+0

感谢好友时,该解决我的问题。 – VVV